学习笔记ssh2(struts2+hibernate3.2+spring2.5)整合

学习笔记ssh2(struts2+hibernate3.2+spring2.5)整合

文章分类:Java编程
SSH2 development
 
1.    项目文件列表
 
2.    Bean 依赖关系:
 
3.    实现目标
实现对用户的增删查改
 
4.    开发步骤
创建ssh2 项目->增长hibernate capability,选择annotationcore library,不要选择创建session factory,而是让spring来管理->增长spring capability,选择aopcorepresistence core, persistence jdbc librara->web-inf目录下的web.xml中加入filterlistener以下:  
  
Xml代码 复制代码
  1. <filter>  
  2.   
  3.         <filter-name>struts2</filter-name>  
  4.   
  5.         <filter-class>  
  6.   
  7.             org.apache.struts2.dispatcher.FilterDispatcher   
  8.   
  9.         </filter-class>  
  10.   
  11.     </filter>  
  12.   
  13.     <filter-mapping>  
  14.   
  15.         <filter-name>struts2</filter-name>  
  16.   
  17.         <url-pattern>/*</url-pattern>  
  18.   
  19.     </filter-mapping>  
  20.   
  21.     <listener>  
  22.   
  23.         <listener-class>  
  24.   
  25.             org.springframework.web.context.ContextLoaderListener   
  26.   
  27.         </listener-class>  
  28.   
  29.     </listener>  
 
 
 
 
 
->src目录下新建struts.xml文件,dtd文件在struts2democopy一个便可
->ok,准备工做已经完成。
->重启服务器,会发现报错,xxx.asm.xxx的错误,这是因为spring中的asm.jar文件与hibernate中的asm.jar版本冲突,删掉asm.2.x.x.jar便可。
 
bean的依赖关系能够看出,action依赖于service的实现,service又依赖于下一
层的userdao
 
5.    创建cn.scau.ssh2.beans.User
包下有User.javauser的属性文件。
还有一个validation.xml待会再说。
6.    创建 cn.scau.ssh2.dao
包下的UserDao.java是一个接口,规定了增删查改的方法
 
Java代码 复制代码
  1. package cn.scau.ssh2.dao;   
  2.   
  3. import java.util.List;   
  4.   
  5. import cn.scau.ssh2.beans.User;   
  6.   
  7. public interface UserDao {   
  8.   
  9.     public void saveUser(User user);   
  10.   
  11.     public void removeUser(User user);   
  12.   
  13.     public User findUserById(int id);   
  14.   
  15.     public List<User> findAllUserser();   
  16.   
  17.     public void updateUser(User user);   
  18.   
  19. }   
  20.   
  21. 7.  创建cn.scau.ssh2.dao.impl包   
  22. 包下有UserDaoImpl.java为具体的实现:   
  23. package cn.scau.ssh2.dao.impl;   
  24.   
  25. import java.util.List;   
  26.   
  27. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  28.   
  29. import cn.scau.ssh2.beans.User;   
  30. import cn.scau.ssh2.dao.UserDao;   
  31. //继承HibernateDaoSupport,用到了getHibernateTemplate这个方法。   
  32. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {   
  33.   
  34.     @SuppressWarnings("unchecked")   
  35.     public List<User> findAllUserser() {   
  36.   
  37.         String hql = "from User user order by user.id desc";   
  38.   
  39.         List<User> list = this.getHibernateTemplate().find(hql);   
  40.   
  41.         return list;   
  42.   
  43.     }   
  44.   
  45.     public User findUserById(int id) {   
  46.   
  47.         User user = (User) this.getHibernateTemplate().get(User.class, id);   
  48.   
  49.         return user;   
  50.     }   
  51.   
  52.     public void removeUser(User user) {   
  53.   
  54.         this.getHibernateTemplate().delete(user);   
  55.   
  56.     }   
  57.   
  58.     public void saveUser(User user) {   
  59.   
  60.         this.getHibernateTemplate().save(user);   
  61.   
  62.     }   
  63.   
  64.     public void updateUser(User user) {   
  65.   
  66.         this.getHibernateTemplate().update(user);   
  67.   
  68.     }   
  69.   
  70. }  
 
 
 
8.    创建cn.scau.ssh2.service
包下的UserService.java其实现与UserDao差很少,由于UserService 依赖于UserDao的实现。
这里就不贴代码,具体看project里的就行
9.    创建cn.scau.ssh2.service.impl
包下的UserServiceImpl.java的实现就是调用UserDaoImpl中的方法。
详见project
10.    创建cn.scau.ssh2.action
包下的各个action实现对页面的控制。
Code
 
Java代码 复制代码
  1. package cn.scau.ssh2.action;   
  2.   
  3. import java.util.Iterator;   
  4. import java.util.Map;   
  5. import java.util.Set;   
  6.   
  7. import cn.scau.ssh2.beans.User;   
  8. import cn.scau.ssh2.service.UserService;   
  9.   
  10. import com.opensymphony.xwork2.ActionSupport;   
  11.   
  12. public class SaveUserAction extends ActionSupport {   
  13.   
  14.     private static final long serialVersionUID = -4055521880257114396L;   
  15.   
  16.     private User user;   
  17.   
  18.     private UserService userService;   
  19.        
  20.     //  get方法能够不用写,由于要用到的只是set方法   
  21.     public UserService getUserService() {   
  22.         return userService;   
  23.     }   
  24.   
  25.     public void setUserService(UserService userService) {   
  26.         this.userService = userService;   
  27.     }   
  28.   
  29.     public void setUser(User user) {   
  30.         this.user = user;   
  31.     }   
  32.   
  33.     public User getUser() {   
  34.         return user;   
  35.     }   
  36.   
  37.     @Override  
  38.     public String execute() throws Exception {   
  39.   
  40.         this.userService.save(user);   
  41.   
  42.         return SUCCESS;   
  43.   
  44.     }   
  45.        
  46. }  
  
 
 
11.    其余action相似实现,主要是在execute()中调用UserService对数据库crud的方法。
此处要注意:能够看到多了一个UpdatePUserAction,这是由于update用户时,先要把用户先preview,而后再update,因此多一个UpdatePUserAction,而后再掉转到update.jsp页面输入须要update的数据。
12.    其实不是写完全部action后才写struts.xmlapplicationContext.xml文件,而是每写完一个action,在struts.xmlapplicationContext.xml中对action进行配置。
13.    struts.xml
code:
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2.   
  3. <!DOCTYPE struts PUBLIC   
  4.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  5.     "http://struts.apache.org/dtds/struts-2.0.dtd">   
  6.   
  7. <struts>   
  8.   
  9.     <constant name="struts.custom.i18n.resources"  
  10.         value="globalMessages">   
  11.     </constant>   
  12.   
  13.     <constant name="struts.i18n.encoding" value="utf-8"></constant>   
  14.   
  15.     <package name="cn.scau.ssh2.action" extends="struts-default">   
  16.   
  17.         <action name="saveUser" class="saveUserAction">   
  18.   
  19.             <result name="success" type="redirect">   
  20.                 listUser.action   
  21.             </result>   
  22.   
  23.             <result name="input">/save.jsp</result>   
  24.   
  25.         </action>   
  26.   
  27.         <action name="listUser" class="listUserAction">   
  28.   
  29.             <result name="success">/list.jsp</result>   
  30.   
  31.             <result name="input">/index.jsp</result>   
  32.   
  33.         </action>   
  34.   
  35.         <action name="deleteUser" class="removeUserAction">   
  36.   
  37.             <result name="success" type="redirect">   
  38.                 listUser.action   
  39.             </result>   
  40.   
  41.         </action>   
  42.   
  43.         <action name="updatePUser" class="updatePUserAction">   
  44.   
  45.             <result name="success">/update.jsp</result>   
  46.   
  47.         </action>   
  48.   
  49.         <action name="updateUser" class="updateUserAction">   
  50.   
  51.             <result name="success" type="redirect">listUser.action</result>   
  52.   
  53.             <result name="input">/update.jsp</result>   
  54.   
  55.         </action>   
  56.   
  57.     </package>   
  58.   
  59. </struts>   
  60. 14. applicationContext.xml   
  61. <?xml version="1.0" encoding="UTF-8"?>   
  62. <beans xmlns="http://www.springframework.org/schema/beans"  
  63.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  64.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">   
  65.   
  66. <!-- destroy-method="close"将链接放回链接池-->   
  67.     <bean id="dataSource"  
  68.         class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   
  69.   
  70.         <property name="driverClassName"  
  71.             value="com.mysql.jdbc.Driver">   
  72.         </property>   
  73.   
  74.         <property name="url" value="jdbc:mysql://localhost:3306/ssh2"></property>   
  75.   
  76.         <property name="username" value="root"></property>   
  77.   
  78.         <property name="password" value="rick"></property>   
  79.   
  80.         <property name="maxActive" value="100"></property>   
  81.   
  82.         <property name="maxIdle" value="30"></property>   
  83.   
  84.         <property name="maxWait" value="500"></property>   
  85.   
  86.         <property name="defaultAutoCommit" value="true"></property>   
  87.   
  88.     </bean>   
  89.   
  90.     <bean id="sessionFactory"  
  91.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  92.   
  93.         <property name="dataSource" ref="dataSource"></property>   
  94.   
  95.         <property name="hibernateProperties">   
  96.   
  97.             <props>   
  98.   
  99.                 <prop key="hibernate.dialect">   
  100.                     org.hibernate.dialect.MySQLDialect   
  101.                 </prop>   
  102.   
  103.                 <prop key="show_sql">true</prop>   
  104.   
  105.                 <!--     <prop key="hbm2ddl.auto">update</prop> -->   
  106.   
  107.             </props>   
  108.   
  109.         </property>   
  110.   
  111.         <property name="mappingResources">   
  112.   
  113.             <list>   
  114.   
  115.                 <value>cn/scau/ssh2/beans/User.hbm.xml</value>   
  116.   
  117.             </list>   
  118.   
  119.         </property>   
  120.   
  121.     </bean>   
  122.   
  123.     <bean id="userDao" class="cn.scau.ssh2.dao.impl.UserDaoImpl"  
  124.         scope="singleton">   
  125.   
  126.         <property name="sessionFactory">   
  127.   
  128.             <ref bean="sessionFactory" />   
  129.   
  130.         </property>   
  131.   
  132.   
  133.     </bean>   
  134.   
  135.     <bean id="userService"  
  136.         class="cn.scau.ssh2.service.impl.UserServiceImpl">   
  137.   
  138.         <property name="userDao" ref="userDao"></property>   
  139.   
  140.     </bean>   
  141.   
  142.     <!-- scope="prototype"由于struts2中action是有状态的,因此要将scope设为"prototype",若是不设,能够试一下效果,当输入有误信息时会出现错误提示重复输出的状况-->   
  143.   
  144.     <bean id="saveUserAction" class="cn.scau.ssh2.action.SaveUserAction"  
  145.         scope="prototype">   
  146.   
  147.         <property name="userService" ref="userService"></property>   
  148.   
  149.     </bean>   
  150.   
  151.     <bean id="listUserAction" class="cn.scau.ssh2.action.ListUserAction"  
  152.         scope="prototype">   
  153.   
  154.         <property name="userService" ref="userService"></property>   
  155.   
  156.     </bean>   
  157.   
  158.     <bean id="removeUserAction"  
  159.         class="cn.scau.ssh2.action.RemoveUserAction" scope="prototype">   
  160.   
  161.         <property name="userService" ref="userService"></property>   
  162.   
  163.     </bean>   
  164.   
  165.     <bean id="updatePUserAction"  
  166.         class="cn.scau.ssh2.action.UpdatePUserAction" scope="prototype">   
  167.   
  168.         <property name="userService" ref="userService"></property>   
  169.   
  170.     </bean>   
  171.   
  172.     <bean id="updateUserAction"  
  173.         class="cn.scau.ssh2.action.UpdateUserAction" scope="prototype">   
  174.   
  175.         <property name="userService" ref="userService"></property>   
  176.   
  177.     </bean>   
  178.   
  179. </beans>  
 
 
 
 
 
 
15.    实现对输入信息的校验
action包下能够看到有*Action-validation.xml文件,实现校验。由于咱们在action中定义的是对象类型,因此校验时采用的validatorvisitor。使用了visitor则要在相应的bean包中加入user对象的基本属性的校验。
16.    此时完成ssh2整合,能够在此基础上实现对业务逻辑的开发。
END:ssh2 project是参照浪曦风中叶老师的视频画葫芦出来的,能够在vercd中找到相应的连接下载。