Struts2+Spring+Hibernate搭建全解!

Struts2+Spring+Hibernate是J2EE的最新流行框架。本篇是我搭建這個框架的經驗總結,有很多人搭建這個框架總會遇到

大大小小的問題,網上也沒有什麼行之有效的方案或成體系的介紹,所以我就決定總結一下我的搭建過程。給一些搭

建尚存問題的朋友提供幫助。

我用這個框架,實現的是基本的CRUD功能的一個僱員管理系統,本來打算豐富一下功能,但是一直沒能抽出空去搞。

目前版本暫定為1.0,除了CRUD外還配置了表單驗證框架JSValidation。功能都能很順利的實現。

現在分享部分源碼,來說明一些注意事項。

以下是部分搭建過程及源碼:

1.先組合實現Hibernate3.2+Spring2.5支持,刪除hibernate.cfg.xml文件,修改applicationContext.xml文件的內容,增加SessionFactory和dataSource的設置。

2.通過MyEclipse的嚮導方式,生成POJO類和對應的映射文件。

3.修改applicationContext.xml文件中<property name="mappingResources">元素的內容。

4.編寫DAO介面和實現類。

5.修改applicationContext.xml文件,增加對Dao實現類的配置。

6.組合Struts2和Spring2.5,修改web.xml文件,增加struts2的所需要的過濾器配置。

7.增加struts2相應類庫,增加struts2與spring的配置jar包。

8.拷貝struts.xml文件到src根目錄下,再修改struts.xml文件,進行常量配置。

9.修改web.xml文件,配置Spring監聽器,和上下文變數。並增加OpenSessionInViewFilter的設置。

10.寫入action類。

11.配置struts.xml文件。

12.修改applicationContext.xml

13.編寫Jsp文件。

14.載入運行項目。

下面是關鍵文件的源碼:

struts.xml源碼:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!--struts2委託spring管理--><constantname="struts.objectFactory"value="spring"/><!--/crm/emp/add.action--><packagename="crm_employee"extends="struts-default"namespace="/emp"><actionname="add"class="addBean"method="add"><result>add.action</result><result>/emp/add_suc.jsp</result></action><actionname="list"class="listBean"method="list"><result>/emp/list.jsp</result></action><actionname="delete"class="deleteBean"method="delete"><result>delete.action</result><result>/emp/delete_suc.jsp</result></action><actionname="update"class="updateBean"method="update"><result>update.action</result><result>/emp/edit_suc.jsp</result></action><actionname="edit"class="editBean"method="edit"><result>/emp/edit.jsp</result></action><!--Addactionshere--></package></struts>

web.xml源碼:

<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!--配置spring的監聽器--><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext*.xml</param-value></context-param><!--開啟監聽--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--配置OpenSessionInViewFilter,必須在struts2監聽之前--><filter><filter-name>lazyLoadingFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><!--設置監聽載入上下文--><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>lazyLoadingFilter</filter-name><url-pattern>*.action</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

applicationContext.xml源碼:

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd"><!--配置Hibernate支持--><beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property><propertyname="url"value="jdbc:mysql://localhost:3306/tables"></property><propertyname="username"value="root"></property><propertyname="password"value="hicc"></property></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"><refbean="dataSource"/></property><propertyname="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><propkey="hibernate.show_sql">true</prop></props></property><propertyname="mappingResources"><list><value>com/sy/crm/model/Employee.hbm.xml</value></list></property></bean><beanid="employeeDao"class="com.sy.crm.dao.hibernate.EmployeeDaoHibernate"><propertyname="sessionFactory"><refbean="sessionFactory"/></property></bean><beanid="employeeManager"class="com.sy.crm.service.impl.EmployeeManagerImpl"><propertyname="employeeDao"><refbean="employeeDao"/></property></bean><beanid="addBean"class="com.sy.crm.action.EmployeeAction"scope="prototype"><propertyname="employeeManager"><refbean="employeeManager"/></property></bean><beanid="listBean"class="com.sy.crm.action.EmployeeAction"scope="prototype"><propertyname="employeeManager"><refbean="employeeManager"/></property></bean><beanid="deleteBean"class="com.sy.crm.action.EmployeeAction"scope="prototype"><propertyname="employeeManager"><refbean="employeeManager"/></property></bean><beanid="updateBean"class="com.sy.crm.action.EmployeeAction"scope="prototype"><propertyname="employeeManager"><refbean="employeeManager"/></property></bean><beanid="editBean"class="com.sy.crm.action.EmployeeAction"scope="prototype"><propertyname="employeeManager"><refbean="employeeManager"/></property></bean><!--事務管理器--><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"><reflocal="sessionFactory"/></property></bean><!--配置事務特性,配置add,delete,update開始的方法,事務傳播特性為required--><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="add*"propagation="REQUIRED"/><tx:methodname="delete*"propagation="REQUIRED"/><tx:methodname="update*"propagation="REQUIRED"/><tx:methodname="*"read-only="true"/></tx:attributes></tx:advice><!--配置那些類的方法進行事務管理,當前com.sy.crm.service包中的子包,類中所有方法需要,還需要參考tx:advice的設置--><aop:config><aop:pointcutid="allManagerMethod"expression="execution(*com.sy.crm.service.*.*(..))"/><aop:advisoradvice-ref="txAdvice"pointcut-ref="allManagerMethod"/></aop:config></beans>

add.jsp源碼:

<%@pagelanguage="java"pageEncoding="utf-8"%><%@tagliburi="/struts-tags"prefix="s"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>addpage</title><scriptlanguage="JavaScript"src="validation-framework.js"></script><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"></head><body><center><h3>僱員註冊:</h3><br><h4><ahref="../emp/list.action">查看所有僱員</a></h4><divid="error"style="color:blue;font-weight:bold;"></div><s:formaction="add"method="post"onsubmit="returndoValidate("form")"name="form"id="form"><s:textfieldname="employee.name"label="姓名"id="name"/><s:textfieldname="employee.address"label="地址"/><s:textfieldname="employee.phone"label="電話"/><s:submitvalue="員工註冊"/></s:form></center></body></html>

list.jsp源碼:

<%@pagelanguage="java"pageEncoding="utf-8"%><%@tagliburi="/struts-tags"prefix="s"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>listemployeepage</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"><styletype="text/css">table{border:1pxsolidblack;border-collapse:collapse;}tabletheadtrth{border:1pxsolidblack;padding:3px;background-color:#cccccc;}tabletbodytrtd{border:1pxsolidblack;padding:3px;}</style></head><body><center><h3>僱員管理:</h3><br><h4><ahref="../emp/add.jsp">員工註冊</a></h4><s:formaction="delete"theme="simple"><table><thead><tr><th>選擇</th><th>編號</th><th>姓名</th><th>電話</th><th>地址</th><th>操作</th></tr></thead><tbody><s:iteratorvalue="employees"><tr><td><inputtype="checkbox"name="id"value="<s:propertyvalue="id"/>"/></td><td><s:propertyvalue="id"/></td><td><s:propertyvalue="name"/></td><td><s:propertyvalue="phone"/></td><td><s:propertyvalue="address"/></td><td><ahref="<s:urlaction="edit"><s:paramname="id"value="id"/></s:url>">修改</a>&nbsp;<ahref="<s:urlaction="delete"><s:paramname="id"value="id"/></s:url>">刪除</a></td></tr></s:iterator></tbody></table><s:submitvalue="delete"/></s:form></center></body></html>

顯示界面如圖:

下面是項目的構圖:

第一點注意的是,搭建出項目,一定會報錯,因為Spring 2.5 AOP Libraries中的asm的三個jar包會和

Hibernate 3.2 Core Libraries中的asm的jar包中的某些類中有衝突。所以一定要刪除Spring中的三個asm的jar包。

第二點要注意的是,struts2的配置包的導入,需要的是5個jar包分別是:

struts2-core-2.0.11.2.jar

freemarker-2.3.8.jar

ognl-2.6.11.jar

xwork-2.05.jar

commons-logging-1.0.4.jar

struts2+spring配置包:struts2-spring-plugin-2.0.11.2.jar

網上有些還說需要把4個spring的包拷到lib下,我是拷了但是,並不確定這樣做是否有必要。

總之是正常運行了。

所以也就沒想太多。如果有的朋友運行不了,可以考慮把這4個需要的包寫上來。

好了就說這麼多吧,有疑問的朋友可以留言。我會盡量答覆。

施楊出品!!!


推薦閱讀:
查看原文 >>
相關文章