ssh

1. 资源准备

Struts-2.3.4.1
Spring-3.0.5
Hibernate-3.6.10

2. 新建空白Web项目

新建一个空白的Web项目,取名为ssh,目录结构如图:

ssh_第1张图片

部署到Tomcat中:

ssh_第2张图片

3. 配置Struts2

复制Struts2必需的jar文件到WEB-INF/lib中,并修改web.xml,加入Struts2的filter:

ssh_第3张图片


添加一个测试Action,并配置struts.xml:

ssh_第4张图片

LoginAction的代码如下:

[java]  view plain copy
  1. package com.xuefeng.ssh.action;  
  2.   
  3. import com.opensymphony.xwork2.Action;  
  4. import com.xuefeng.ssh.service.LoginService;  
  5. import com.xuefeng.ssh.service.impl.LoginServiceImpl;  
  6.   
  7. public class LoginAction implements Action {  
  8.   
  9.     // 对应于login.jsp的输入,需要getter和setter  
  10.     private String username;  
  11.   
  12.     private String password;  
  13.   
  14.     /** 
  15.      * 验证登录的逻辑 
  16.      */  
  17.     private LoginService loginService;  
  18.       
  19.     public LoginAction() {  
  20.         loginService = new LoginServiceImpl();  
  21.     }  
  22.   
  23.     public String execute() throws Exception {  
  24.         if (loginService.validate(username, password)) {  
  25.             return SUCCESS;  
  26.         }  
  27.         return INPUT;  
  28.     }  
  29.   
  30.     public String getUsername() {  
  31.         return username;  
  32.     }  
  33.   
  34.     public void setUsername(String username) {  
  35.         this.username = username;  
  36.     }  
  37.   
  38.     public String getPassword() {  
  39.         return password;  
  40.     }  
  41.   
  42.     public void setPassword(String password) {  
  43.         this.password = password;  
  44.     }  
  45. }  

login.jsp代码如下:

[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"%>  
  2. <html>  
  3.     <head>  
  4.         <title>登录页面title>  
  5.     head>  
  6.       
  7.     <body>  
  8.         <form action="login.action" method="post">  
  9.             <table cellpadding="0" cellspacing="0" norder="0" align="center">  
  10.                 <caption>用户登录caption>  
  11.                 <tr>  
  12.                     <td>用户名:td>  
  13.                     <td><input type="text" name="username">td>  
  14.                 tr>  
  15.                 <tr>  
  16.                     <td>密  码:td>  
  17.                     <td><input type="text" name="password">td>  
  18.                 tr>  
  19.                 <tr>  
  20.                     <td colspan="2"><input type="submit" value="登录">td>   
  21.                 tr>  
  22.             table>  
  23.         form>  
  24.     body>  
  25. html>  

login.jsp里的input的name需要和LoginAction里的属性名一致。

这样,此时访问登录页面进行测试:

ssh_第5张图片

登录成功后,按照struts.xml里的设置,跳转(redirect)到success.jsp:

ssh_第6张图片

这里的测试账号在LoginServiceImpl中设置为test和test,如果输错,按照struts.xml里的设置,回到登录界面。

4. 配置Spring

4.1 添加Spring支持

添加Spring需要的jar和配置文件applicationContext.xml。jar可以从Struts的lib中复制,也可以到Spring的官网下载Spring的RELEASE。

ssh_第7张图片

然后,修改web.xml,添加Spring支持:

[html]  view plain copy
  1. <listener>  
  2.     <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
  3. listener>  

4.2 Struts集成Spring

Struts是以plugin的方式来集成Spring的,添加struts2-spring-plugin-2.3.4.1.jar,在Struts初始化时,会去加载该jar中包含的struts-plugin.xml,以StrutsSpringObjectFactory取代默认的StrutsObjectFactory,从而达到以Spring容器管理对象的目的。

然后,修改applicationContext.xml,配置已有的Action对象:

[html]  view plain copy
  1. xml version="1.0" encoding="UTF-8"?>  
  2.     "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3.   
  4. <beans>  
  5.     <bean id="loginAction" class="com.xuefeng.ssh.action.LoginAction" scope="prototype">bean>  
  6. beans>  

最后,修改struts.xml中Action的引用,把Action的class指定为Spring中bean的id,这样当创建Action的时候,就会以Spring的方式来创建对象了:

[html]  view plain copy
  1. <action name="login" class="loginAction">  
  2.     <result name="input" type="redirect">/login.jspresult>  
  3.     <result name="success" type="redirect">/success.jspresult>  
  4. action>  
ssh_第8张图片

4.3 以Spring管理对象创建方式

把Action对象和Spring管理的对象结合起来,在applicationContext.xml中配置:

[html]  view plain copy
  1. xml version="1.0" encoding="UTF-8"?>  
  2.     "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3.   
  4. <beans>  
  5.     <bean id="loginAction" class="com.xuefeng.ssh.action.LoginAction" scope="prototype">  
  6.         <property name="loginService" ref="loginService">property>  
  7.     bean>  
  8.     <bean id="loginService" class="com.xuefeng.ssh.service.impl.LoginServiceImpl">bean>  
  9. beans>  

这样,就不需要再LoginAction中显示的对loginService赋值了。


5. 配置Hibernate

5.1 添加必需jar

ssh_第9张图片

5.2 添加映射文件和DAO层代码

ssh_第10张图片

5.3 使用Spring配置Hibernate

修改applicationContext.xml:

[html]  view plain copy
  1. xml version="1.0" encoding="UTF-8"?>  
  2.     "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3.   
  4. <beans>  
  5.     <bean id="loginAction" class="com.xuefeng.ssh.action.LoginAction"  
  6.         scope="prototype">  
  7.         <property name="loginService" ref="loginService">property>  
  8.     bean>  
  9.     <bean id="loginService" class="com.xuefeng.ssh.service.impl.LoginServiceImpl">  
  10.         <property name="userDao" ref="userDao" />  
  11.     bean>  
  12.   
  13.     <bean id="dataSource"  
  14.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  15.         <property name="driverClassName">  
  16.             <value>com.mysql.jdbc.Drivervalue>  
  17.         property>  
  18.         <property name="url">  
  19.             <value>jdbc:mysql://localhost:3306/sshvalue>  
  20.         property>  
  21.         <property name="username">  
  22.             <value>rootvalue>  
  23.         property>  
  24.         <property name="password">  
  25.             <value>rootvalue>  
  26.         property>  
  27.   
  28.     bean>  
  29.   
  30.     <bean id="sessionFactory"  
  31.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  32.         <property name="dataSource" ref="dataSource">  
  33.         property>  
  34.         <property name="mappingResources">  
  35.             <list>  
  36.                 <value>com/xuefeng/ssh/model/User.hbm.xmlvalue>  
  37.             list>  
  38.         property>  
  39.         <property name="hibernateProperties">  
  40.             <props>  
  41.                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>  
  42.                 <prop key="hibernate.hbm2ddl.auto">updateprop>  
  43.             props>  
  44.         property>  
  45.     bean>  
  46.   
  47.     <bean id="userDao" class="com.xuefeng.ssh.dao.impl.UserDaoHibernateImpl">  
  48.         <property name="sessionFactory" ref="sessionFactory" />  
  49.     bean>  
  50. beans>   

对象的引用链为:

loginAction - loginService - userDao - sessionFactory - dataSource


记得要添加如下jar包:struts2-spring-plugin-2.1.8.1.jar



否则配置的多好,Spring都注入不了,总是报空指针异常:

ssh_第11张图片




你可能感兴趣的:(java技术)