ssh(Struts+Spring+Hibernate)环境搭建,实现登录
新建表test
表的属性为主键id,以及username和password
打开MyEclipse,需要注意的是这里应该处于MyEclipse Java Enterprise视图;新建一个Web Project,输入适当的工程名字,这里我们输入ssh,Finish即可
在ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Struts Capabilities…,添加Struts的支持
在弹出的对话框中选择Struts 1.2,修改Base package for new classes成所需的包名,其余保持原状,Finish即可
在ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Spring Capabilities…,添加Spring框架支持
选择好后Next,在窗口中选择Browse,选择ssh工程下面的WEB-INF文件夹,然后Finsh
在MyEclipse右上角选择MyEclipse Database Explorer,打开数据库管理视图
在左侧的DB Browser点击右键,选择New…,打开Database Driver对话框
在Database Driver对话框中按照如下配置选择数据库驱动。首先选择Driver Template,在这里我们选择Mircosoft SQL Server(jTDS driver)。Driver Name是以后配置时使用的驱动名字,用以区分驱动,这里使用SQLServertest即可。然后根据实际情况填写URL,User name和Password。点击Add JARs添加数据库驱动文件。为方便配置,可以选择Save password保存密码。配置完毕后Finish即可
当配置完数据源后,就可以添加Hibernate支持了。切换到MyEclipse Java Enterprise视图,在ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Hibernate Capabilities…,添加Hibernate的支持
我们选择Hibernate3.2,全部按照默认设置即可,然后点击Next
在对话框中选择Spring configuration file,表示我们希望将Hibernate托管给Spring进行管理,这是将Hibernate与Spring进行整合的基础。然后点击Next
在出现的对话框中选择Existing Spring configuration file。因为我们已经添加了Spring的配置文件,所以这里选择的是已存在的配置文件。MyEclipse会自动找到存在的那个文件。然后在SessionFactory ID中输入Hibernate的SessionFactory在Spring配置文件的Bean ID的名字,这里我们输入sessionFactory即可。然后点击Next
在出现的对话框中的Bean Id里面输入数据源在Spring中的Bean ID的名字,这里我们输入dataSource。然后在DB Driver里面选择我们刚刚配置好的ssh,MyEclipse会将其余的信息自动填写到表格里面。然后点击Next
在出现的对话框中取消Create SessionFactory class。点击Finish即可
此时,切换到MyEclipse DataBase Explorer视图,右键打开数据库连接,在需要使用的数据表格上面点击右键,选择Hibernate Reverse Engineering...。这里我们使用刚刚建立在test数据库中添加的user表
在打开的对话框中修改Java src folder为我们建立的/ssh/src,这里需要选择到src文件夹,并且需要填写Java package,这是MyEclipse生成的类所在的包,我们将其取名为user。然后选择Java Data Object,建立POJO类。然后选择Java Data Access Object。其中,POJO类是数据库表格所对应的Java类,JDO类是MyEclipse自动生成的对数据库的一些操作。这里会封装一些常用的操作,简化我们的编写。填写完成后点击Next
在出现的对话框中选择ID Generator为native,然后点击Finish即可
建立TestDAO的借口ITestDAO,右击鼠标——>Refactor——>Extract Interface
选择全部,OK即可
将ITestDAO移入com.ssh.dao,将TestDAO移入com.ssh.dao.imply
DAO类是直接与数据库打交道的类,为了对业务逻辑进行封装,我们将业务全部写在service类里面,和dao一样,我们先建立service包,里面添加业务接口,具体的实现放在service.impl里面
在service中建立接口ITestService.java,在service中impl中建立TestService.java
ITestService.java package com.ssh.service; import java.util.List; public interface ITestService { public abstract List findByUsername(Object username); }
UserService.java package com.ssh.service.impl; import java.util.List; import com.ssh.dao.ITestDAO; import com.ssh.service.ITestService; public class TestService implements ITestService{ private ITestDAO testDAO; public List findByUsername(Object username){ return testDAO.findByUsername(username); } public ITestDAO getTestDAO() { return testDAO; } public void setTestDAO(ITestDAO testDAO) { this.testDAO = testDAO; } }
此时的整体工程结构为
此时的applicationContext内容需要配置bean内容为
package com.ssh.struts.action; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.struts.ActionSupport; public class BaseAction extends ActionSupport { protected Object getBean(String id) { WebApplicationContext ctx = WebApplicationContextUtils .getWebApplicationContext(this.servlet.getServletContext()); return ctx.getBean(id); } }
为了让Web容器能够初始化Spring,我们需要修改web.xml文件,增加以下内容
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; String username = loginForm.getUsername(); String password = loginForm.getPassword(); ActionForward forward = mapping.getInputForward(); ITestService service = (ITestService) getBean("testService"); Test userFromDB = (Test)service.findByUsername(username).get(0); if (userFromDB.getPassword().equals(password)) { forward = mapping.findForward("suc"); } return forward; } }
login.jsp
<%@ page language="java" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> <head> <title>JSP for LoginForm form</title> </head> <body> <html:form action="/login"> password : <html:password property="password"/><html:errors property="password"/><br/> username : <html:text property="username"/><html:errors property="username"/><br/> <html:submit/><html:cancel/> </html:form> </body> </html>
上面的工作完成以后理论上应该可用,但是当你运行的事后却发现会有一个非常诡异的异常出现
这个问题本来面目是这样,由于MyEclipse给我们做的事情太全面了,全面到spring和hibernate的包都是重复引用的。
其解决办法就是干掉多余的包,在Tomcat 5.5/webapps/ssh/WEB-INF/lib下的asm-2.2.3.jar就可以了,在重启Tomcat我们看看我们干了这么长时间的成果吧
在applicationContext.xml中加入如下内容进行初始化
- <bean name="testService" class="com.ssh.service.impl.TestService">
- <property name="testDAO">
- <ref bean="TestDAO" />
- </property>
- </bean>
这样就完成了SSH框架实现的登录功能