`
fishergay
  • 浏览: 33125 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Struts2.12+Spring3.2+hibernate4.2集成3

    博客分类:
  • SSH
阅读更多

1.上一章集成了springhibernate, 这一章节再讨论把struts2集成的方案。

2.在解压了struts-2.3.12-all.zip之后有个apps 目录, 这里面是struts2的一些使用示例, 我们使用winrar解压struts2-blank.war,解压后到WEB-INF/lib 目录把所有jar文件拷贝到项目WEB-INF/lib目录下面, 之前hibernate中带了一个javaassist-3.15.0.jar, struts2中带了javaassist-3.11.0.jar文件,会冲突, 需要把avaassist-3.11.0.jar 删除, 保留高版本。 如果整合后报velocity-tool 的错误,还有其他几个jar文件也需要加入velocity-1.7.jar  velocity-tools-2.0.jar  在解压了struts-2.3.12-all.zip之后有个lib 目录下拷贝struts2-spring-plugin-2.3.12.jar 到项目中, 此jar包是spring 和 struts2 整合的jar


3.在解压了struts-2.3.12-all.zip之后有个apps 目录, 到WEB-INF/classes 目录下面 把struts.xml拷贝到项目src目录下面。

4.3. spring 和 struts2 整合提供了两种方案

第一:把struts2 action类完全交给spring 来创建 一般配置如下

  @Controller("userAction")
  @Scope("prototype")
  public class UserAction {
    }

  需要把UserAction交给spring来创建对象, 并且需要写@Scope("prototype")     如果不写上就会有线程安全的问题, 默认struts2 创建的action 都是多实例的,     因此需要开发人员不要遗忘写上这个属性,否则很容易引起bug

 struts.xml配置

<action name="userList" class="userAction" method="userList">
	<result name="success">
        /WEB-INF/page/user/user_list.jsp
    </result>
</action>

 此处action标签配置上的class=”userAction” 名称则是刚才在UserAction类上面注解重命名的名称, 如果UserAction 里面有些类属性是交给spring 管理, spring则可以自动注入。

第二: 由struts2-spring-plugin-2.3.12.jar 插件来创建action实例

struts.xml配置

<constant name="struts.objectFactory" value="spring" />
<actionname="userList"class="com.lysoft.web.action.user.UserAction" method="userList">
<result name="success">
     /WEB-INF/page/user/user_list.jsp</result>
</action>

 此处action标签配置上的class=com.lysoft.web.action.user.UserAction 名称则是UserAction类全路径的名称,这样的好处在于不用写@Scope("prototype")

避免了开发人员不小心犯错, 如果UserAction 里面有些类属性是交给spring 管理

spring则也可以自动注入。

 

Struts2 在匹配一个请求时,到配置文件中查找和请求相同的action标签,  如果配置了<constant name="struts.objectFactory" value="spring" />

会根据标签上面的class 属性上面的值, 到spring配置文件中查找是否配置了对应的bean节点, 查找到了则有spring来创建action, 如果查找不到会由struts2 的插件创建action的实例。

总结推荐使用第二种方法, 避免不小心犯下错误。

 

5. 在项目中的web.xml 文件加入如下配置:

 

<!-- 初始化Spring Beans -->
  	<context-param>
	  	<param-name>contextConfigLocation</param-name>
	  	<param-value>classpath:applicationContext-*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- log4j 和spring 的整合 -->
	<context-param>
		<param-name>webAppRootKey</param-name>
	  	<param-value>ssh2.root</param-value>
	</context-param>
	<context-param> 
	   <param-name>log4jConfigLocation</param-name> 
	   <param-value>classpath:log4j.properties</param-value> 
	</context-param> 
	<context-param> 
	   <param-name>log4jRefreshInterval</param-name> 
	   <param-value>60000</param-value> 
	</context-param>
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
	
	<!-- 使用Spring提供的编码过滤器 -->
	<filter>  
    	<filter-name>encodingFilter</filter-name>  
       	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
       	<init-param>  
        	<param-name>encoding</param-name>  
           	<param-value>UTF-8</param-value>  
       	</init-param>  
       	<init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>
    </filter>
    <filter-mapping>  
    	<filter-name>encodingFilter</filter-name>  
       	<url-pattern>/*</url-pattern>  
    </filter-mapping>  
  	
	<!-- openSessioInView 需要放在strts2的前面 -->  
    <filter>  
    	<filter-name>openSessionInView</filter-name>  
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
        <!-- 当sessionFactory名称不叫sessionFactory的时候 使用下面的配置 -->  
        <!-- <init-param>  
            <param-name>sessionFactoryBeanName</param-name>  
            <param-value>mySessionFactory</param-value>  
        </init-param>-->  
    </filter>  
    <filter-mapping>  
    	<filter-name>openSessionInView</filter-name>  
        <url-pattern>*.do</url-pattern>  
    </filter-mapping>  
  	
  	<!-- 拦截Struts2 Action -->
  	<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

6.至此已经完成struts2.12+spring3.2+hibernate4.2的集成了一章节讨论测试3个框架整合是否正常。

  • 大小: 10.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics