使用Spring更好地处理Struts动作

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

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

  这种技术很简单并且易于理解。不幸的是,它将 Struts 动作与 Spring 框架耦合在一起。如果您想替换掉 Spring,那么您必须重写代码。并且,由于 Struts 动作不在 Spring 的控制之下,所以它不能获得 Spring AOP 的优势。当使用多重独立的 Spring 环境时,这种技术可能有用,但是在大多数情况下,这种方法不如另外两种方法合适。

  窍门 2. 覆盖 RequestProcessor

  将 Spring 从 Struts 动作中分离是一个更巧妙的设计选择。分离的一种方法是使用 org.springframework.web.struts.DelegatingRequestProcessor 类来覆盖 Struts 的 RequestProcessor 处理程序,如清单 2 所示:

  清单 2. 通过 Spring 的 DelegatingRequestProcessor 进行整合

  <?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="ca.nexcel.books.actions.SearchSubmit"
        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"/>
<controller processorClass="org.springframework.web.struts.
  DelegatingRequestProcessor"/> |(1)
<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="csntextConfigLocation" value="/WEB-INF/beans.xml"/>
</plug-in>
 
</struts-config>

  我利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认的 Struts RequestProcessor。下一步是在我的 Spring 配置文件中注册该动作,如清单 3 所示:

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

正在加载评论...