使用Spring更好地处理Struts动作

http://tech.ddvip.com   2006年11月20日    社区交流

本文详细介绍使用Spring更好地处理Struts动作

  DelegatingRequestProcessor 方法的确比第一种方法好,但是仍然存在一些问题。如果您使用一个不同的 RequestProcessor,则需要手动整合 Spring 的 DelegatingRequestProcessor。添加的代码会造成维护的麻烦并且将来会降低您的应用程序的灵活性。此外,还有过一些使用一系列命令来代替 Struts RequestProcessor 的传闻。 这种改变将会对这种解决方法的使用寿命造成负面的影响。

  窍门 3. 将动作管理委托给 Spring

  一个更好的解决方法是将 Strut 动作管理委托给 Spring。您可以通过在 struts-config 动作映射中注册一个代理来实现。代理负责在 Spring 环境中查找 Struts 动作。由于动作在 Spring 的控制之下,所以它可以填充动作的 JavaBean 属性,并为应用诸如 Spring 的 AOP 拦截器之类的特性带来了可能。

  清单 5 中的 Action 类与清单 4 中的相同。但是 struts-config 有一些不同:

  清单 5. Spring 整合的委托方法

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
     "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
  <form-bean name="searchForm" 
   type="org.apache.struts.validator.DynaValidatorForm">
        <form-property name="isbn"  type="java.lang.String"/>
  </form-bean>
 </form-beans>
<global-forwards type="org.apache.struts.action.ActionForward">
   <forward  name="welcome"        path="/welcome.do"/>
   <forward  name="searchEntry"      path="/searchEntry.do"/>
   <forward  name="searchSubmit"      path="/searchSubmit.do"/>
</global-forwards>
<action-mappings>
  <action  path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>
  <action  path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/>
  <action  path="/searchSubmit" 
       type="org.springframework.web.struts.DelegatingActionProxy" |(1)
       input="/searchEntry.do"
       validate="true"
       name="searchForm">
       <forward name="success" path="/WEB-INF/pages/detail.jsp"/>
       <forward name="failure" path="/WEB-INF/pages/search.jsp"/>
  </action> 
</action-mappings>
<message-resources parameter="ApplicationResources"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  <set-property 
  property="pathnames" 
  value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
<plug-in 
  className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/beans.xml"/>
</plug-in>
 
</struts-config>

  清单 5 是一个典型的 struts-config.xml 文件,只有一个小小的差别。它注册 Spring 代理类的名称,而不是声明动作的类名,如(1)处所示。DelegatingActionProxy 类使用动作映射名称查找 Spring 环境中的动作。这就是我们使用 ContextLoaderPlugIn 声明的环境。

来源:ibm    作者:George Franciscus    责编:豆豆技术应用

正在加载评论...