WebWork 2.1 / 2.2 與 Spring 集成方法總結(jié)

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

          兩種方法:

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

          該方法的執(zhí)行順序是先WebWork,后Spring。
          即,首先在xwork.xml中找到待執(zhí)行的action,如果該action依賴其他bean,再到applicationContext.xml中查找被依賴的bean。

          WebWork2的IoC功能實(shí)現(xiàn)是在xwork.xml中,指定action類與其他bean的依賴關(guān)系。即:
          (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時(shí),采用external-ref來(lái)指定依賴的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 增加一個(gè)攔截器,允許引用作為外部資源進(jìn)行解析
          <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的外部解析器在同一個(gè)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>

          第一個(gè)偵聽(tīng)器是spring必需的,無(wú)論是否與WebWork集成,都要定義該偵聽(tīng)器;第二個(gè)偵聽(tīng)器是外部解析器所需要的,作用是通過(guò)ServletContext來(lái)取出Spring的ApplicationContext,作為WebWork與Spring的“橋梁”。

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

          說(shuō)明:
          如果不使用WebWork2,完全使用Spring,達(dá)到上述效果,在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集成)

          該方法的執(zhí)行順序是先Spring,后WebWork。
          即,首先由Spring負(fù)責(zé)wire所有的依賴關(guān)系,再由XWork來(lái)執(zhí)行action。

          注意:因?yàn)閄Work為每個(gè)action調(diào)用生成一個(gè)新的類實(shí)例,action在Spring的applicationContext.xml中應(yīng)該配置為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>

          說(shuō)明:
          該方法與WebWork 2.2中的方法基本相同。

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

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

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

          2 配置web.xml文件,啟動(dòng)Spring偵聽(tīng)器
          <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 設(shè)置由Spring來(lái)初始化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>
          摘自:http://www.cnblogs.com/harryguo/archive/2008/05/23/1205765.html

          posted on 2010-04-12 14:48 飛熊 閱讀(258) 評(píng)論(0)  編輯  收藏 所屬分類: struts2.0


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2010年4月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 泽库县| 潞西市| 遂平县| 阿城市| 通渭县| 南宫市| 甘德县| 融水| 饶河县| 都昌县| 襄樊市| 陆丰市| 水城县| 铅山县| 兰西县| 黄陵县| 松滋市| 浮山县| 乃东县| 广州市| 分宜县| 蒲城县| 九台市| 拉孜县| 阜南县| 九寨沟县| 安阳县| 巴马| 梨树县| 上蔡县| 昌都县| 车险| 淮北市| 湖南省| 云南省| 天水市| 吉林省| 龙江县| 昔阳县| 阳泉市| 黎城县|