[转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合

Posted Chobits

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合相关的知识,希望对你有一定的参考价值。

原文地址:http://blog.csdn.net/ycb1689/article/details/22928519

最新版Struts2+Hibernate+Spring整合

目前为止三大框架最新版本是:

struts2.3.16.1

hibernate4.3.4

spring4.0.2

其中struts2和hibernate的下载方式比较简单,但是spring下载有点麻烦,可以直接复制下面链接下载最新版spring


技术分享http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.2.RELEASE/spring-framework-4.0.2.RELEASE-dist.zip 

一. 所需的jar包(其中aopaliance-1.0.jar,是spring所依赖的jar,直接复制粘贴到谷歌百度就有的下载)

 

框架

版本

所需jar包

Struts2

2.3.16.1

  技术分享

Hibernate

4.3.4   技术分享

spring

4.0.2技术分享


其它

技术分享

二. 创建一张表

 

[java] view plain
  1. CREATE TABLE `user` (  
  2.   
  3. `id` int(11) NOT NULL AUTO_INCREMENT,  
  4.   
  5. `user_name` varchar(20) DEFAULT NULL,  
  6.   
  7. `password` varchar(20) DEFAULT NULL,  
  8.   
  9. `address` varchar(100) DEFAULT NULL,  
  10.   
  11. `phone_number` varchar(20) DEFAULT NULL,  
  12.   
  13. `create_time` datetime DEFAULT NULL,  
  14.   
  15. `update_time` datetime DEFAULT NULL,  
  16.   
  17. PRIMARY KEY (`id`)  
  18.   
  19. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULTCHARSET=utf8;  
  20.   
  21. ---并插入一条数据  
  22. INSERT INTO `user` VALUES ("1‘, ‘test‘,‘test‘, ‘test‘, ‘test‘, ‘2014-03-29 00:48:14‘, ‘2014-03-29 00:48:17‘);  


三. 先看下myeclipse的目录结构

技术分享

技术分享

 

四. 配置文件

1. web.xml

 

[java] view plain
  1. <!--?xml version="1.0" encoding="UTF-8"?-->  
  2. <web-app version="3.0" 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/javaee   
  3.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  4.   <display-name></display-name>   
  5.      
  6.   <!-- 添加对spring的支持 -->  
  7.   <context-param>  
  8.     <param-name>contextConfigLocation</param-name>  
  9.     <param-value>classpath:applicationContext.xml</param-value>  
  10.   </context-param>  
  11.      
  12.     <listener>  
  13.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  14.     </listener>  
  15.        
  16.   <!-- 添加对struts2的支持 -->  
  17.   <filter>  
  18.     <filter-name>struts2</filter-name>  
  19.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  20.   </filter>   
  21.   <!-- 当hibernate+spring配合使用的时候,如果设置了lazy=true,那么在读取数据的时候,当读取了父数据后,  
  22.      hibernate会自动关闭session,这样,当要使用子数据的时候,系统会抛出lazyinit的错误,  
  23.       这时就需要使用spring提供的 OpenSessionInViewFilter,OpenSessionInViewFilter主要是保持Session状态  
  24.       知道request将全部页面发送到客户端,这样就可以解决延迟加载带来的问题 -->  
  25.    <filter>  
  26.     <filter-name>openSessionInViewFilter</filter-name>  
  27.     <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
  28.     <init-param>  
  29.       <param-name>singleSession</param-name>  
  30.       <param-value>true</param-value>  
  31.     </init-param>  
  32.   </filter>  
  33.      
  34.   <filter-mapping>  
  35.     <filter-name>struts2</filter-name>  
  36.     <url-pattern>/*</url-pattern>  
  37.   </filter-mapping>  
  38.    <filter-mapping>  
  39.     <filter-name>openSessionInViewFilter</filter-name>  
  40.     <url-pattern>*.do,*.action</url-pattern>  
  41.   </filter-mapping>  
  42.      
  43.   <welcome-file-list>  
  44.     <welcome-file>index.jsp</welcome-file>  
  45.   </welcome-file-list>  
  46. </web-app>  


2. applicationContext.xml

[java] view plain
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <beans xmlns="http://www.springframework.org/schema/beans"    
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:p="http://www.springframework.org/schema/p"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop"   
  6.     xmlns:context="http://www.springframework.org/schema/context"  
  7.     xmlns:jee="http://www.springframework.org/schema/jee"  
  8.     xmlns:tx="http://www.springframework.org/schema/tx"  
  9.     xsi:schemaLocation="    
  10.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
  11.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  12.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  13.         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
  14.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">    
  15.    
  16.     <!-- 加载数据库属性配置文件 -->  
  17.     <context:property-placeholder location="classpath:db.properties" />  
  18.    
  19.     <!-- 数据库连接池c3p0配置 -->  
  20.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
  21.         destroy-method="close">  
  22.         <property name="jdbcUrl" value="${db.url}"></property>  
  23.         <property name="driverClass" value="${db.driverClassName}"></property>  
  24.         <property name="user" value="${db.username}"></property>  
  25.         <property name="password" value="${db.password}"></property>  
  26.         <property name="maxPoolSize" value="40"></property>  
  27.         <property name="minPoolSize" value="1"></property>  
  28.         <property name="initialPoolSize" value="1"></property>  
  29.         <property name="maxIdleTime" value="20"></property>  
  30.     </bean>  
  31.       
  32.     <!-- session工厂 -->  
  33.     <bean id="sessionFactory"  
  34.         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  35.         <property name="dataSource">  
  36.             <ref bean="dataSource" />  
  37.         </property>  
  38.         <property name="configLocation" value="classpath:hibernate.cfg.xml"/>  
  39.         <!-- 自动扫描注解方式配置的hibernate类文件 -->  
  40.         <property name="packagesToScan">  
  41.             <list>  
  42.                 <value>com.bufoon.entity</value>  
  43.             </list>  
  44.         </property>  
  45.     </bean>  
  46.    
  47.     <!-- 配置事务管理器 -->  
  48.     <bean id="transactionManager"  
  49.         class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
  50.         <property name="sessionFactory" ref="sessionFactory" />  
  51.     </bean>  
  52.    
  53.     <!-- 配置事务通知属性 -->  
  54.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  55.         <!-- 定义事务传播属性 -->  
  56.         <tx:attributes>  
  57.             <tx:method name="insert*" propagation="REQUIRED" />  
  58.             <tx:method name="update*" propagation="REQUIRED" />  
  59.             <tx:method name="edit*" propagation="REQUIRED" />  
  60.             <tx:method name="save*" propagation="REQUIRED" />  
  61.             <tx:method name="add*" propagation="REQUIRED" />  
  62.             <tx:method name="new*" propagation="REQUIRED" />  
  63.             <tx:method name="set*" propagation="REQUIRED" />  
  64.             <tx:method name="remove*" propagation="REQUIRED" />  
  65.             <tx:method name="delete*" propagation="REQUIRED" />  
  66.             <tx:method name="change*" propagation="REQUIRED" />  
  67.             <tx:method name="get*" propagation="REQUIRED" read-only="true" />  
  68.             <tx:method name="find*" propagation="REQUIRED" read-only="true" />  
  69.             <tx:method name="load*" propagation="REQUIRED" read-only="true" />  
  70.             <tx:method name="*" propagation="REQUIRED" read-only="true" />  
  71.         </tx:attributes>  
  72.     </tx:advice>  
  73.       
  74.     <!-- 应用普通类获取bean    
  75.     <bean id="appContext" class="com.soanl.util.tool.ApplicationUtil"/>-->  
  76.    
  77.     <!-- 配置事务切面 -->  
  78.     <aop:config>  
  79.         <aop:pointcut id="serviceOperation"  
  80.             expression="execution(* com.bufoon.service..*.*(..))" />  
  81.         <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />  
  82.     </aop:config>  
  83.    
  84.     <!-- 自动加载构建bean -->  
  85.     <context:component-scan base-package="com.bufoon" />  
  86.    
  87. </beans>  



3. db.properties

 

[java] view plain
  1. db.driverClassName=com.mysql.jdbc.Driver  
  2. db.url=jdbc:mysql://localhost:3306/test  
  3. db.username=root  
  4. db.password=root  


4. hibernate.cfg.xml

 

[java] view plain
  1. <!--?xml version=‘1.0‘ encoding=‘UTF-8‘?-->  
  2.    
  3.    
  4. <hibernate-configuration>  
  5.     <session-factory>  
  6.    
  7.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  8.         <property name="jdbc.batch_size">20</property>  
  9.         <property name="connection.autocommit">true</property>  
  10.    
  11.         <!-- 显示sql语句 -->  
  12.         <property name="show_sql">true</property>  
  13.         <property name="connection.useUnicode">true</property>  
  14.         <property name="connection.characterEncoding">UTF-8</property>  
  15.    
  16.         <!-- 缓存设置 -->  
  17.         <property name="cache.provider_configuration_file_resource_path">/ehcache.xml</property>  
  18.         <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>  
  19.         <property name="cache.use_query_cache">true</property>  
  20.    
  21.     </session-factory>  
  22. </hibernate-configuration>  


5. struts.xml

[html] view plain
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5. <struts>  
  6.     <!-- 配置为开发模式 -->  
  7.     <constant name="struts.devMode" value="false" />  
  8.     <!-- 配置扩展名为action -->  
  9.     <constant name="struts.action.extension" value="action" />  
  10.     <!-- 配置主题 -->  
  11.     <constant name="struts.ui.theme" value="simple" />  
  12.     <!-- 配置上传文件大小此处默认为20M -->  
  13.     <constant name="struts.multipart.maxSize" value="2097152" />  
  14.       
  15.     <!-- 国际化编码 -->     
  16.     <constant name="struts.i18n.encoding" value="UTF-8" />     
  17.     <!-- 定位视图资源的根路径。默认值为/WEB-INF/content -->     
  18.     <constant value="/WEB-INF/templates" name="struts.convention.result.path" />     
  19.     <!-- 指定convention扫描以xxx结尾的包 -->     
  20.     <constant value="action" name="struts.convention.package.locators" />     
  21.     <!-- 是否将Action类转换成小写 -->     
  22.     <constant value="false" name="struts.convention.package.lowercase" />        
  23.          
  24.     <!-- 是否将actionName分割,去掉action部分,以大写字母作为分割 -->  
  25.     <constant name="struts.convention.action.name.separator" value="_" />  
  26.     <!-- 浏览器是否缓存静态内容 ,开发阶段最好关闭-->  
  27.     <constant name="struts.serve.static.browserCache" value="false"/>  
  28.     <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->   
  29.     <constant name="struts.configuration.xml.reload" value="true"/>      
  30.     <!-- 配置使用Spring管理Action -->  
  31.     <constant name="struts.objectFactory" value="spring"/>  
  32.     <!-- 让struts2始终先考虑spring的自动装箱   -->  
  33.     <constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />  
  34.     <!-- 设置默认的父包  
  35.     <constant value="MAIN" name="struts.convention.default.parent.package" />  
  36.     <package name="MAIN" extends="struts-default" namespace="/">  
  37.     </package>  
  38.      -->  
  39.   
  40.       
  41.     <package name="default" namespace="/" extends="struts-default">  
  42.         <interceptors>  
  43.             <!--  声明一个拦截器   进行登录检查  -->  
  44.             <interceptor name="checkePrivilege" class="com.oa168.interceptor.CheckPrivilegeInterceptor"></interceptor>  
  45.               
  46.             <!--  重新定义defaultStack拦截器栈,需要先判断权限    -->   
  47.             <interceptor-stack name="defaultStack">  
  48.                 <interceptor-ref name="checkePrivilege" />  
  49.                 <interceptor-ref name="defaultStack" />  
  50.             </interceptor-stack>  
  51.         </interceptors>  
  52.            
  53.         <!-- 配置全局的Result -->  
  54.         <global-results>  
  55.             <result name="loginUI">/WEB-INF/jsp/userAction/loginUI.jsp</result>  
  56.             <result name="noPrivilegeError">/noPrivilegeError.jsp</result>  
  57.         </global-results>  
  58.           
  59.         <!-- 测试用的action,当与Spring整合后,class属性写的就是Spring中bean的名称   
  60.              不需要写com.oa168.test.TestAction形式  
  61.              所以整合就是在Action类中加入@Controller  @Scope("prototype")  
  62.              并在Web.xml中加入监听器  
  63.         <listener>  
  64.             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  65.         </listener>  
  66.         <context-param>  
  67.             <param-name>contextConfigLocation</param-name>  
  68.             <param-value>classpath:applicationContext*.xml</param-value>  
  69.         </context-param>  
  70.            -->  
  71.         <action name="test" class="testAction">  
  72.             <result name="success">/test.jsp</result>  
  73.         </action>   
  74.       
  75.         <!-- 首页 -->  
  76.         <action name="homeAction_*" class="homeAction" method="{1}">  
  77.             <result name="{1}">/WEB-INF/jsp/homeAction/{1}.jsp</result>  
  78.             <!--   
  79.             <result name="index">/WEB-INF/jsp/homeAction/Index.jsp</result>  
  80.             <result name="top">/WEB-INF/jsp/homeAction/Top.jsp</result>  
  81.             <result name="bottom">/WEB-INF/jsp/homeAction/Bottom.jsp</result>  
  82.             <result name="left">/WEB-INF/jsp/homeAction/Left.jsp</result>  
  83.             <result name="mainFrame">/WEB-INF/jsp/homeAction/MainFrame.jsp</result> -->  
  84.         </action>  
  85.            
  86.     </package>  
  87.   
  88. </struts>  


 

FreeMark的配置

 

为了在FreeMarker模板中使用标签库,可按如下步骤进行

1.将struts-tags.tld文件复制到WEB-INF目录下

   即将系统所需的标签库定义文件(*.tld文件)复制到web应用中。对于基于struts2框架的JAVA_Web应用,则需要将Struts2- core.jar包解压,取出其中的struts-tags.tld文件,并复制到web应用的WEB-INF目录下。同时所需的最少Jar包如下图

技术分享

2.在web.xml文件中启动JspSupportServlet

  在web.xml文件中作如下配置,如下:

[html] view plain
  1.  <servlet>  
  2. <servlet-name>JspSupportServlet</servlet-name>  
  3. <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>  
  4.       <!--配置JspSupportServlet自启动-->  
  5. <load-on-startup>1</load-on-startup>  
  6. </servlet>  

此配置本人没配FreeMark一样可以,具体用处有待研究。

 

3. 在FreeMarker模板文件中使用“assign指令”导入标签库

 导入标签库的代码如下:

[html] view plain
  1. <#--定义web-inf/strust-tags.tld文件对应的标签库前缀为s-->  
  2.  <#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>  

说明:在上面导入的标签库定义文件中,指定了标签库前缀为s,而该前缀对应的标签库定义文件主放置在/WEB-INF/struts-tags.tld路径下、

4.完毕

经过上述步骤后,即可在应用的FreeMarker模板中使用Struts2标签。在FreeMarker模板中增加了标签库定义后,就可以在FreeMarker模板中使用Struts2标签了。在FreeMarker使用标签与在jsp中使用标签略有差别.

补充说明

   我们不能直接通过浏览器直接请求该页面,否则看到的不是我们想要的结果,而是该模板页面的源代码(因为WEB容器默认不会处理 FreeMarker模板页面)。

        正如前面使用FreeMarker模板作为视图组件时看到的,FreeMarker作为视图组件是由Servlet负责加载该模板,并使用数据模型填充该模板,并且填充后的标准html响应输出给浏览者。

   在Strtus2框架的支持下,Struts2框架充当了之前的Servlet角色只要浏览者的请求经过了Struts2处理后,Struts2框架就会自动加载FreeMarker模板,并使用数据模型填充该模板,并且将最后的HTML页面输出给浏览者.。

   为了让所有的用户请求都经过Struts2框架处理,我们将所有的FreeMarker模板文件放在web-inf/ftl路径下.

   因为浏览者无法直接访问web-inf/ftl路径下的资源,所以我们在struts.xml配置文中增加了如下配置片段:

[html] view plain
  1. <action name="*">  
  2.           <result type="freemarker">/WEB-INF/

以上是关于[转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate入门-----Hiberna核心文件详解

Struts 2知识点

5 -- Hibernate的基本用法 --4 9 其他常用的配置属性

hibernate ThreadLocal

hibernate

php十大模版渲染引擎