`
lin870521
  • 浏览: 16882 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

webwork2 + spring 结合的几种方法的小结

阅读更多
参考:
http://wiki.opensymphony.com/display/WW/WebWork+2+Spring+Integration
http://forum.iteye.com/viewtopic.php?t=8509
http://forum.iteye.com/viewtopic.php?t=9939

下载:
http://xwork-optional.dev.java.net/


昨天使用webwork和spring,使用的是SpringObjectFactory方法,突然发现validator没发生作用,折腾半天,
换成external-ref的方法,可以了.但是觉得external-ref的方法太麻烦了.
就是去http://xwork-optional.dev.java.net/下载了一下最新的源码,换回SpringObjectFactory的方式,发现问题解决了(重载getClassInstance解决了这个问题).

于是仔细研究了一下几种组合的方法,根据前面参考中的文章,整理了一下.

看了xwork-optional的源码,发现其实三种方法的源码都包含在这里了,当然也包括external-ref这种方法的源码,只是换了包名和文件名,但是源码基本没变.你可以仔细看看.

1.External-Ref

这种方法看起来比较烦琐,可能现在都改用第3种方法了.

第一步:在web.xml里面增加一个listener,如下

java代码:

                <listener>
                        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                </listener>
              
                <listener>
                        <listener-class>com.opensymphony.xwork.spring.SpringExternalReferenceResolverSetupListener</listener-class>
                </listener>



第二步:在Spring里面配置类似Dao之类的bean,例如

java代码:

                <bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />



第三步:配置XWork.xml,例如

java代码:

                <package name="default" extends="webwork-default"
                        externalReferenceResolver="com.opensymphony.xwork.spring.SpringExternalReferenceResolver">              
                        <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"/>
                      
                        <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>
              
                </package>
     
2.SpringObjectFactory
我一直用这种方法,因为以前觉得是xwork本身提供的方法,升级有保障.

配置方法:
第一步.在spring的 applicationContext.xml (根据实际情况决定) 里面定义你的action,例如

java代码:

                <bean name="some-action" class="fully.qualified.class.name" singleton="false">
                    <property name="someProperty"><ref bean="someOtherBean"/></property>
                </bean>
              
可以看到,可以使用Spring的特性来给你的action设置属性等,当然也可以使用Spring的拦截器等 (可以使用不一定等于推荐使用)

注意一定是singleton="false",因为xwork的action是这样要求的.

第二步.在xwork.xml里定义你的action定义

java代码:

                <action name="myAction" class="some-action">
                    <result name="success">view.jsp</result>
                </action>
第三步.要使上面的关联生效,还要用我们的SpringObjectFactory来替换Xwork的默认ObjectFactory.
最新的SpringObjectFactory里面,有两种方法,其中我觉得A方法更直观一些.

A:修改web.xml

java代码:

                            <!-- 这个是spring的listener,可以改为你的自定义的spring的Listenter -->
                        <listener>
                                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                        </listener>
                      
              
                        <!-- 这个必须在 Spring ContextLoaderListener 的后面 -->
                        <listener>
                          <listener-class>com.opensymphony.xwork.spring.SpringObjectFactoryListener</listener-class>
                        </listener>
B.在spring的applicationContext.xml (根据实际情况决定)里面定义一个bean,例如

java代码:

                    <bean id="spring-object-factory" class="com.opensymphony.xwork.spring.SpringObjectFactory"
                            init-method="initObjectFactory"/>
这样Spring会自动调用initObjectFactory方法来替换Xwork的默认ObjectFactory

3.ActionAutowiringInterceptor
这个方法是最近出现的,可能是最简洁的方法,但是不知道性能上有没有问题,我觉得jdk1.4以后应该没有任何问题吧,至于实际效果你的自己测试一下.

第一步:配置web.xml
java代码:

                            <!-- 这个是spring的listener,可以改为你的自定义的spring的Listenter -->
                        <listener>
                                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                        </listener>
      
第二步配置xwork.xml里面的拦截器

java代码:

                <interceptors>
                  <interceptor name="autowire" class="com.opensymphony.xwork.spring.interceptor.ActionAutowiringInterceptor">
                    <param name="autowireStrategy">@org.springframework.beans.factory.config.AutowireCapableBeanFactory@AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE</param>
                  </interceptor>
                  <interceptor-stack name="autowireDefault">
                    <interceptor-ref="autowire" />
                    <interceptor-ref="defaultStack" />
                  </interceptor-stack>
                </interceptors>

你的拦截器里都要包含autowire,例如这个autowireDefault就相当于以前的默认的拦截器了.
其中的拦截器策略可以配置,上面配置的是根据类型,如果不配置,默认是根据名字.

一共有四种策略:
AUTOWIRE_CONSTRUCTOR
AUTOWIRE_BY_TYPE
AUTOWIRE_BY_NAME
AUTOWIRE_AUTODETECT

这种方法执行原理就是查找你的action的所有字段,如果和Spring的定义bean有相同的,就自动设置.

假设你的Spring的applicationContext.xml里面有这样一个定义:

java代码:

            <bean id="userManager" class="com.test.UserManager" />

如果你在xwork.xml 里面定义的某个action有一个字段叫userManager,那么在运行时刻就会自动被设置为Spring的配置文件里定义的Bean.

以上如有不对指出,还请指出
分享到:
评论

相关推荐

    webwork2.2.4+spring+hibernate做的一个登入程序

    最近在做个项目,用的是webwork+spring+hibernate,在网上看了不少webwork+spring的配制方式,大多都是老的配制方式,比如2.1.7的,webwork2.2.4新加了很多功能,和spring的配制也简单了很多,我做了一个简单的登录...

    webwork2.24+spring2.0+hibernate3.1(3)

    webwork2.24+spring2.0+hibernate3.1三框架整合使用

    Webwork+spring+hibernate集成实例

    在Webwork+Spring+Hibernate集成中,Spring通常作为整体架构的胶水,负责各组件的连接和协调。它可以管理Webwork的Action,通过依赖注入提供所需的Service和DAO。同时,Spring可以配置Hibernate SessionFactory,...

    webwork+spring+ibatis很适合初学者的实例

    "webwork+spring+ibatis" 的实例通常会展示如何将这三个框架集成到一个完整的Web项目中。这个实例可能包含以下部分: 1. **环境配置**:安装和配置Java开发环境,如JDK,以及相关的开发工具,如IDEA或Eclipse。 2. ...

    webWork2.2+spring +SpringMVC组合 例子

    2. "CSDN技术中心 Servlet规范简介——web框架是如何注入到Servlet中的.mht":这个文件可能是从CSDN网站上保存下来的一篇文章,讨论了Servlet容器的工作原理以及Web框架如何与Servlet协作,这对于理解WebWork和...

    webwork+spring+hibernate 开发资料

    在提供的文档“webwork+spring+hibernate架构.doc”中,可能详细阐述了这三者如何协同工作,包括配置文件设置、依赖注入的使用、事务管理策略以及具体实例的开发步骤。而“webwork.doc”则可能专门介绍了WebWork框架...

    webwork2.24+spring2.0+hibernate3.1(2)

    webwork2.24+spring2.0+hibernate3.1三框架整合使用

    webwork2.2.7+spring+hibernate+oracle整合

    ### WebWork 2.2.7 + Spring + Hibernate + Oracle 整合知识点解析 #### 一、项目背景与概述 本项目的重点在于实现WebWork框架(版本2.2.7)、Spring框架、Hibernate持久层框架以及Oracle数据库之间的整合。通过...

    webwork2.2.7+spring+hibernate用到的包lib

    在IT行业中,Web开发是一个关键领域,而Webwork2.2.7、Spring和Hibernate是三个非常重要的开源框架,它们通常被联合使用以构建高效、可维护的企业级应用。这个压缩包“webwork2.2.7+spring+hibernate用到的包lib”...

    webwork2.2.7+spring+hibernate分页查询

    本项目采用WebWork 2.2.7框架结合Spring和Hibernate技术实现了一个基本的用户数据分页查询功能。主要目标是根据用户输入的用户名获取相应的数据,并以分页的形式展示给用户。 #### 二、系统结构分析 项目采用了...

    如何实现webwork+spring+hibernate框架结合

    WebWork+Spring+Hibernate是早期比较流行的一种技术组合,它们各自解决的问题域不同,但结合起来可以形成一个强大的企业级开发框架。接下来我们将详细介绍如何实现这三种框架的结合。 #### 第一步:构建Java Web ...

    webwork2.24+spring2.0+hibernate3.1(4)

    webwork2.24+spring2.0+hibernate3.1三框架整合使用

    webwork+spring+hibernate+freemarker (A)demo_lib

    综上所述,"webwork+spring+hibernate+freemarker"的组合提供了一个强大的Java Web开发环境,能够方便地处理业务逻辑、数据库交互和视图展示。对于学习或实践Java Web开发的人员来说,理解和掌握这四个框架的协同...

    webwork2.24+spring2.0+hibernate3.1

    webwork2.24+spring2.0+hibernate3.1三框架的整合的资料没有一份完整的,自己整了一份,供大家参考

    webwork+Spring+Ibatis

    webwork+Spring+ibatis 此为webwork+Spring+ibatis+freemarker 源码实例 因为包大,只好分开。。请一并下载webwork+Spring+ibatis_lib放入些实例中,,才能运行! 解压后,请参考mark.txt文件操作,即可!

    Webwork2+Spring+Ibatis+Hibernate框架中文教程

    Webwork2、Spring、Ibatis和Hibernate是四个在Java开发中广泛应用的开源框架,它们各自在Web应用的不同层面上发挥着关键作用。本教程旨在帮助开发者深入理解和掌握这些框架的集成使用,以便构建高效、可维护的Web...

    webwork+spring+hibernate

    在IT行业中,Web开发是一个广泛且重要的领域,而"webwork+spring+hibernate"是一种常见的技术栈,用于构建动态、数据驱动的Web应用程序。这个技术组合涉及到三个核心组件:WebWork(一种MVC框架)、Spring(一个全面...

    webwork+spring+hibernate整合开发网络书城 第5讲

    webwork+spring+hibernate整合开发网络书城 第5讲

    webwork+spring+hibernate+freemarker (A)demo_project

    本源码实例只供学习。。 请一并下载webwork+spring+hibernate+freemarker (A)demo_lib 配合才能使用(此为项目的lib包。。) 请打开mark.txt参考操作

    webwork+spring整合例子 内带使用说明 以及webwork文档(中文)

    在这个“webwork+spring整合例子”中,很可能是提供了一个实际的项目示例,演示了如何配置和使用这两个框架的结合。这通常包括以下步骤: 1. 配置Spring的ApplicationContext,定义Bean并声明它们之间的依赖。 2. 在...

Global site tag (gtag.js) - Google Analytics