`

WebWork 2.1 / 2.2 与 Spring 集成方法总结

阅读更多

                 

第一部分:WebWork2.1与Spring集成

两种方法:

法一:先WebWork后Spring(利用webwork2-spring.jar集成)

该方法的执行顺序是先WebWork,后Spring。
即,首先在xwork.xml中找到待执行的action,如果该action依赖其他bean,再到applicationContext.xml中查找被依赖的bean。

WebWork2的IoC功能实现是在xwork.xml中,指定action类与其他bean的依赖关系。即:
(1)xwork.xml文件
<action name="myAction" class="com.ryandaigle.web.actions.MyAction">
<external-ref name="DAO">myDAO</external-ref>
<result name="success" type="dispatcher">
<param name="location">/success.jsp</param>
</result>
</action>

(2)applicationContext.xml文件
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />

具体集成步骤如下:

1. 下载以下文件:
http://www.ryandaigle.com/pebble/images/webwork2-spring.jar

2. 配置xwork.xml

2.1 在xwork.xml中定义action时,采用external-ref来指定依赖的spring bean

<action name="myAction" class="com.foo.Action">
<external-ref name="someDao">someDao</external-ref>

<result name="success" type="dispatcher">
<param name="location">/success.jsp</param>
</result>
</action>

2.2 在<package>中指定外部引用解析器

<package name="default" extends="webwork-default"
externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver"/>

SpringServletContextReferenceResolver作用是在applicationContext.xml中解析外部引用的bean

2.3 增加一个拦截器,允许引用作为外部资源进行解析
<interceptors>
<interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/>
<interceptor-stack name="myDefaultWebStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="reference-resolver"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultWebStack"/>

3. 在web.xml中配置Spring与XWork的外部解析器在同一个Web Context中工作
<!--载入spring配置文件-->
 <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>

<listener>
<listener-class>com.atlassian.xwork.ext.ResolverSetupServletContextListener</listener-class>
</listener>

第一个侦听器是spring必需的,无论是否与WebWork集成,都要定义该侦听器;第二个侦听器是外部解析器所需要的,作用是通过ServletContext来取出Spring的ApplicationContext,作为WebWork与Spring的“桥梁”。

4.applicationContext.xml文件跟xwork.xml文件的存放路径一下,都在classpath下
在applicationContext.xml中定义被引用的bean
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />

说明:
如果不使用WebWork2,完全使用Spring,达到上述效果,在applicationContext.xml中采取类似定义:
<bean id="myAction" class="com.ryandaigle.web.actions.MyAction" singleton="false">
<property name="DAO">
<ref bean="myDAO"/>
</property>
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />

 

法二:先Spring后WebWork(利用spring-xwork-integration.jar集成)

该方法的执行顺序是先Spring,后WebWork。
即,首先由Spring负责wire所有的依赖关系,再由XWork来执行action。

注意:因为XWork为每个action调用生成一个新的类实例,action在Spring的applicationContext.xml中应该配置为prototype。

1. 配置SpringObjectFactory

(0)下载https://xwork-optional.dev.java.net/files/documents/1475/11992/spring-xwork-integration.jar

(1) 可以在web.xml配置

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

<listener>
<listener-class>com.opensymphony.xwork.spring.SpringObjectFactoryListener</listener-class>
</listener>

(2) 或者:在applicationContext.xml配置
<bean id="springObjectFactory"
class="com.opensymphony.xwork.spring.SpringObjectFactory"
init-method="initObjectFactory"/>

以上两种方法任选一种即可

2. 在applicationContext.xml中定义bean
<bean name="some-action" class="fully.qualified.class.name" singleton="false">
<property name="someProperty"><ref bean="someOtherBean"/></property>
</bean>

3. 在xwork.xml中定义action(注意action的class与bean的id相同)

<action name="myAction" class="some-action">
<result name="success">view.jsp</result>
</action>

说明:
该方法与WebWork 2.2中的方法基本相同。

 

第二部分:WebWork2.2与Spring的集成

Spring是WebWork2.2中唯一支持的IoC容器。

1 配置webwork.properties文件,指定spring作为webwork的IoC容器
webwork.objectFactory = spring
(1)默认的autowiring模式是:by name
即如果applicationContext.xml文件中的bean id与xwork.xml文件中的action name相同,就
(2)如果要改为其他模式:
webwork.objectFactory.spring.autoWire = name|type|auto|constructor

2 配置web.xml文件,启动Spring侦听器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

3 在WEB-INF目录下增加applicationContext.xml文件
例:
<?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="autodetect">
<bean id="personManager" class="com.acme.PersonManager"/>
...
</beans>

4 设置由Spring来初始化action
4.1     在Spring的applicationContext.xml文件中配置bean(即action类)
4.2     将xwork.xml中的action的class属性,由class名改为Spring中定义的bean名
例如:
(1)applicationContext.xml中,定义bean id是bar
<beans default-autowire="autodetect">
<bean id="bar" class="com.my.BarClass" singleton="false"/>
...
</beans>
(2)xwork.xml中,action的class="bar",而不是通常的类名
<package name="secure" namespace="/secure" extends="default">
<action name="bar" class="bar">
<result>bar.ftl</result>
</action>
</package>

Tag标签: spring,webwork
分享到:
评论

相关推荐

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.1.1. 与其他web框架的集成 13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. ...

    spring、struts、ibatis框架搭建流程

    ##### 2.2 加入Spring框架 - **复制JAR文件**:将解压缩后的Spring框架中的`spring.jar`文件复制到Web项目的`WEB-INF/lib`目录下。 - **复制Log4j JAR文件**:将Spring框架解压文件夹下的`lib\log4j`中的所有jar文件...

    Spring in Action(第二版 中文高清版).part2

    15.4 集成Spring Web Flow与其他框架 15.4.1 Jakarts Struts 15.4.2 JavaServer Face 15.5 小结 第16章 集成其他Web框架 16.1 协同使用Spring和Struts 16.1.1 向Struts注册Spring插件 16.1.2 编写知晓Spring...

    Spring in Action(第2版)中文版

    16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...

    Spring in Action(第二版 中文高清版).part1

    15.4 集成Spring Web Flow与其他框架 15.4.1 Jakarts Struts 15.4.2 JavaServer Face 15.5 小结 第16章 集成其他Web框架 16.1 协同使用Spring和Struts 16.1.1 向Struts注册Spring插件 16.1.2 编写知晓Spring...

    spring入门

    - **集成能力**: Spring MVC不仅可以独立使用,还可以与其他MVC框架(如Struts、WebWork等)集成,为开发者提供更多选择。 ##### **3.3 持久层支持** - **JDBC支持**: Spring提供了高级的JDBC访问层,简化了数据库...

    Spring 2.0 开发参考手册

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    java框架之spring

    此模块有助于Spring与其他Web框架(如WebWork或Struts)的集成。 - **Spring WebMVC**:提供了一个完整的MVC框架实现,不同于传统MVC框架的是,Spring的MVC框架更加注重模型与视图的清晰分离,从而提高了代码的可...

    spring chm文档

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    Spring中文帮助文档

    2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) ...

    Spring API

    13.1.1. 与其他MVC实现框架的集成 13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. ...

    struts2课堂笔录_0906

    - **与Struts2对比**:Spring MVC的灵活性和可扩展性都很高,特别是在集成Spring其他模块时表现尤为突出。相比之下,Struts2可能在某些方面略显繁琐。 ### Struts2的具体配置 #### 3.1 web.xml配置 ```xml ...

    struts-2.2.1.1完整jar包

    7. **与其他框架的集成**: Struts 2可以很好地与Spring、Hibernate等其他流行框架集成,提供了一个全面的Java EE解决方案。此版本可能改善了与其他框架的集成体验。 在实际项目中,开发者通常会根据需求选择特定...

    webmvcspring

    尽管 Spring 自身提供了强大的 Web 支持,但它仍然很容易与其他 Web 框架(如 Struts 或 WebWork)进行集成。这种灵活性意味着开发者可以根据项目需求选择最适合的技术栈。 #### 四、Spring Web 支持与中间层构建 ...

    基于struts+spring+ibatis的轻量级J2EE开发

    尽管近年来出现了一些新的框架如Spring MVC、WebWork等,这些框架在设计上可能更加先进和灵活,但从实际应用角度来看,Struts仍然是一个稳定且成熟的选择。在JPetStore 4.0中,Struts的应用并不局限于传统的固定用法...

Global site tag (gtag.js) - Google Analytics