首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring struts 调整

2012-10-05 
spring struts 整合Spring Struts1.x 整合使用Spring的ActionSupport?类整合Structs1.X,使用?Spring?的?De

spring struts 整合

Spring Struts1.x 整合

使用Spring的ActionSupport?类整合Structs1.X,使用?Spring?的?DelegatingRequestProcessor覆盖Struts的RequestProcessor,将StrutsAction管理委托给Spring框架
--
装载应用环境:
无论您使用哪种技术,都需要使用?Spring?的?ContextLoaderPlugin?为?Struts?的?ActionServlet?装载?Spring?应用程序环境
在struts-config.xml?文件尾处添加该插件:
<plug-in?className=??"org.springframework.web.struts.ContextLoaderPlugIn">
????<set-property property=?"contextConfigLocation" value="/WEB-INF/class/applicationContext.xml"/>
</plug-in>
--
第一种:使用Spring的ActionSupport
该方法:?简单快捷,但会导致struts和spring耦合在一起,如果要移值struts应用程序要重写代码.
例如:
??public?class?ActionName?extends?ActionSupport?{
????public?ActionForward?execute(????){
????------------------------------------------
????ApplicationContext?ctx=?getWebApplicationContext();????
????BookService?bookService?=?(BookService)?ctx.getBean("bookService");?????
????-------------------------------------------------------------------------??
???}
}

--

?

第二种:覆盖?RequestProcessor
该方法使用?org.springframework.web.struts.DelegatingRequestProcessor?类来覆盖?Struts?的?RequestProcessor?处理程序,通过?Spring?的?DelegatingRequestProcessor?进行整合,看下面的struts-config.xml文件的主要配置部分:
<form-beans>
?<controller?processorvalue="spring" />

?????? ...

</struts>

3.配置Spring监听器。在web.xml文件中增加如下内容:

<listener>

?????? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

4.Spring配置文件。默认情况下,Spring配置文件为applicationContext.xml,该文件需要保存在Web应用的WEB-INF目录下。内容示例如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

?????? "-//SPRING//DTD BEAN//EN"

?????? "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

?????? <bean id="personManager" extends="struts-default">

?????????? <action name="foo" namespace="/secure" extends="default">

?????????? <action name="bar" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

?????? "-//SPRING//DTD BEAN//EN"

?????? "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

?????? <bean id="bar" singleton="false"/>

?????? ...

</beans>

?

??? <!--? 设置Spring对象工厂为自动 -->

??? <constant name="struts.objectFactory" value="spring" />

??? <package name="spring-default">

??????? <interceptors>

??????????? <interceptor name="autowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>

??????? </interceptors>

??? </package>???

</struts>

其中设置了Struts 2框架常量struts.objectFactory的值为spring,实际上,spring是org.apache.struts2.spring.StrutsSpringObjectFactory类的缩写,默认情况下所有由Struts 2框架创建的对象都是由ObjectFactory实例化的,ObjectFactory提供了与其他IoC容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或者它的任何子类,并且要带有一个不带参数的构造方法。在这里用org.apache.struts2.spring.StrutsSpring ObjectFactory代替了默认的ObjectFactory。

如果Action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配Action,默认情况下框架使用的自动装配策略是name,也就是说框架会去Spring中寻找与Action属性名字相同的bean,可选的装配策略还有:type、auto、constructor,开发者可以通过常量struts.objectFactory.spring.autoWire来进行设置。?

Struts 2框架整合Spring后,处理用户请求的Action并不是Struts框架创建的,而是由Spring插件创建的。创建实例时,不是利用配置Action时指定的class属性值,根据bean的配置id属性,从Spring容器中获得相应的实例。

?

?

热点排行