`
cppmule
  • 浏览: 436760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

ssh(Struts+Spring+Hibernate)环境搭建,实现登录

    博客分类:
  • java
 
阅读更多
 

新建表test

 

 

 

表的属性为主键id,以及usernamepassword


 

 

打开MyEclipse,需要注意的是这里应该处于MyEclipse Java Enterprise视图;新建一个Web Project,输入适当的工程名字,这里我们输入sshFinish即可

 

 

 

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即可。然后根据实际情况填写URLUser namePassword。点击Add JARs添加数据库驱动文件。为方便配置,可以选择Save password保存密码。配置完毕后Finish即可

 

 

 

当配置完数据源后,就可以添加Hibernate支持了。切换到MyEclipse Java Enterprise视图,在ssh工程上面右击,在弹出的菜单中选择MyEclipse -> Add Hibernate Capabilities…,添加Hibernate的支持

 

 

 

 

我们选择Hibernate3.2,全部按照默认设置即可,然后点击Next

 

 

 

在对话框中选择Spring configuration file,表示我们希望将Hibernate托管给Spring进行管理,这是将HibernateSpring进行整合的基础。然后点击Next

 

 

 

在出现的对话框中选择Existing Spring configuration file。因为我们已经添加了Spring的配置文件,所以这里选择的是已存在的配置文件。MyEclipse会自动找到存在的那个文件。然后在SessionFactory ID中输入HibernateSessionFactorySpring配置文件的Bean ID的名字,这里我们输入sessionFactory即可。然后点击Next

 

 

在出现的对话框中的Bean Id里面输入数据源在Spring中的Bean ID的名字,这里我们输入dataSource。然后在DB Driver里面选择我们刚刚配置好的sshMyEclipse会将其余的信息自动填写到表格里面。然后点击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 Generatornative,然后点击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,在serviceimpl中建立TestService.java

 

 

[java] view plaincopy
  1. ITestService.java  
  2. package com.ssh.service;  
  3. import java.util.List;  
  4. public interface ITestService {  
  5.       
  6.      public abstract List findByUsername(Object username);  
  7. }  
 

 

 

 

 

[java] view plaincopy
  1. UserService.java  
  2. package com.ssh.service.impl;  
  3. import java.util.List;  
  4. import com.ssh.dao.ITestDAO;  
  5. import com.ssh.service.ITestService;  
  6. public class TestService implements ITestService{  
  7.       
  8.     private ITestDAO testDAO;  
  9.       
  10.     public List findByUsername(Object username){  
  11.         return testDAO.findByUsername(username);  
  12.     }  
  13.     public ITestDAO getTestDAO() {  
  14.         return testDAO;  
  15.     }  
  16.     public void setTestDAO(ITestDAO testDAO) {  
  17.         this.testDAO = testDAO;  
  18.     }  
  19.       
  20. }  
 

 

 

 

此时的整体工程结构为

 

 

此时的applicationContext内容需要配置bean内容为

 

 

 

[xhtml] view plaincopy
  1. <bean id="UserDAO" class="com.ssh.dao.impl.UserDAO">  
  2.     <property name="sessionFactory">  
  3.        <ref bean="sessionFactory" />  
  4.     </property>  
  5. </bean>  
 

 

 

 

StrutsSpring整合方式其核心是让Struts能够访问到交给Spring进行托管的类,这个我在网上看到了一个方式,自我认为很好,因此只要我们可以让StrutsSpring获得需要的类就可以了。 为了达到这个目标,我们创建一个类BaseAction

 

 

[java] view plaincopy
  1. package com.ssh.struts.action;  
  2. import org.springframework.web.context.WebApplicationContext;  
  3. import org.springframework.web.context.support.WebApplicationContextUtils;  
  4. import org.springframework.web.struts.ActionSupport;  
  5. public class BaseAction extends ActionSupport {  
  6. protected Object getBean(String id) {  
  7. WebApplicationContext ctx = WebApplicationContextUtils  
  8. .getWebApplicationContext(this.servlet.getServletContext());  
  9. return ctx.getBean(id);  
  10. }  
  11. }  
 

 

 

为了让Web容器能够初始化Spring,我们需要修改web.xml文件,增加以下内容

 

[xhtml] view plaincopy
  1. <context-param>  
  2. <param-name>contextConfigLocation</param-name>  
  3. <param-value>/WEB-INF/applicationContext.xml</param-value>  
  4. </context-param>  
  5. <servlet>  
  6. <servlet-name>SpringContextServlet</servlet-name>  
  7. <servlet-class>  
  8. org.springframework.web.context.ContextLoaderServlet  
  9. </servlet-class>  
  10. <load-on-startup>1</load-on-startup>  
  11. </servlet>  
 

 

 

 

通过上面的配置,我们已经能够让这三个框架来协同作战了,让我们现在来测试一下。

首先创建基于StrutsJSP页面。打开WEB-INF下面的struts-config.xml,单击右键,选择New -> Form, Action and JSP

 

 

 

在弹出的对话框中添加User case,然后点击Add生成Properties代码。这会由MyEclipse自动生成相应的Form代码。输入完成后选择JSP选项卡,选上Create JSP form,修改路径,然后点击Next

 

 

 

 

 

在出现的对话框中修改Path,将Superclass更改为前面定义的BaseAction,然后将Input Source改为自己需要的路径。完成后Finish即可

 

 

 

 

然后在struts-config.xml点击右键,选择New -> Forward,准备创建一个ActionForward

 

 

 

 

 

在弹出的对话框中,选择Local Action Forward,通过Browser填写Action Path,然后填写NamePath,完成后点击Finish即可

 

 

 

 

LoginAction中添加如下代码

 

 

 

[java] view plaincopy
  1. public ActionForward execute(ActionMapping mapping, ActionForm form,  
  2.             HttpServletRequest request, HttpServletResponse response) {  
  3.             LoginForm loginForm = (LoginForm) form;  
  4.             String username = loginForm.getUsername();  
  5.             String password = loginForm.getPassword();  
  6.             ActionForward forward = mapping.getInputForward();  
  7.             ITestService service = (ITestService) getBean("testService");  
  8.             Test userFromDB = (Test)service.findByUsername(username).get(0);  
  9.             if (userFromDB.getPassword().equals(password)) {  
  10.             forward = mapping.findForward("suc");  
  11.             }  
  12.             return forward;  
  13.             }  
  14. }  
 

 

 

 

login.jsp

 

 

[java] view plaincopy
  1. <%@ page language="java" pageEncoding="ISO-8859-1"%>  
  2. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>  
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  
  4. <html>  
  5. <head>  
  6. <title>JSP for LoginForm form</title>  
  7. </head>  
  8. <body>  
  9. <html:form action="/login">  
  10. password : <html:password property="password"/><html:errors property="password"/><br/>  
  11. username : <html:text property="username"/><html:errors property="username"/><br/>  
  12. <html:submit/><html:cancel/>  
  13. </html:form>  
  14. </body>  
  15. </html>  
 

 

 

上面的工作完成以后理论上应该可用,但是当你运行的事后却发现会有一个非常诡异的异常出现

 

 

 

 

这个问题本来面目是这样,由于MyEclipse给我们做的事情太全面了,全面到springhibernate的包都是重复引用的。

 

其解决办法就是干掉多余的包,在Tomcat 5.5/webapps/ssh/WEB-INF/lib下的asm-2.2.3.jar就可以了,在重启Tomcat我们看看我们干了这么长时间的成果吧

 

 

 

applicationContext.xml中加入如下内容进行初始化

 

 

 

[xhtml] view plaincopy
  1. <bean name="testService" class="com.ssh.service.impl.TestService">  
  2. <property name="testDAO">  
  3. <ref bean="TestDAO" />  
  4. </property>  
  5. </bean>  
 

 

 

 

这样就完成了SSH框架实现的登录功能

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics