學習筆記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中找到相應的連接下載。
 
 
 
 
 
相關文章
相關標籤/搜索