zoukankan      html  css  js  c++  java
  • Spring 容器管理 Action

      使用 Spring 管理 Struts 的 Action可以充分利用Spring 的 Ioe 功能,使 Action 无须关心业务逻辑组件的实现,而由 Spring 负责为 Action注入业务逻辑组件引用,从而实现更好地解祸。

      为了让 Struts 将请求转发到 Spring 容器内的 bean,系统将采用 DelegatingRequestProcessor 的整合策略。因为这种策略无需 Struts 创建 Action 实例,直接由 Spring 容器负责创建 Action 实例,并为其注入依赖关系。使系统更早将请求转发给 Spring 容器控制。采用这种整合策略,必须在 struts-config.xrnl 文件中配置 controller 元素,并通过指定 processorClass 属性指定 DelegatingRequestProcessor 处理器。即在配置文件中增加如下代码:

    <controller inputForward="true"processorClass="org.
    springfrarnework.web.struts.DelegatingRequestProcessor"/>

      经过这个简单的配置,则无须为struts-config.xrnl中的 Action配置 class属性,因为Struts无须负责创建Action实例,由DelegatingRequestProcessor直接将请求转发到Spring容器内。

    下面是struts-config.xrnl文件中 Action的配置代码:

    <!--添加消息评论…>
    <action path="/addNewsReview"name="
    addNewsReviewForm"scope="request"validate="true"
    input="i口put">
    <forward narne="failure"path=刷 /loadNewsReviewByNews.do"/>
    <forward name="success" path="/loadNewsReviewByNews.do"/>
    <faction>

      在上面的配置代码中,没有为action 元素确定 class 属性,只有当采用DelegatingRequestProcessor代替了默认的RequestProcessor后,才允许这样配置。

    DelegatingRequestProcessor转发请求时,请求被转发给Spring容器中同名的bean处理,因此必须在Spring容器中配置同名的bean。对于上面Action的配置,必须在Spring容器中配置如下的bean:

    <bean name="/addNewsReview" class="org.
    yeeku.action.AddReviewAction">
    <property name="mgr" ref="facadeManager"/>
    </bean>


      下面是整个应用struts-config.xrnl配置文件的源代码:

    <?xml version="l.O" encoding="GBK"?><!--Struts配置文件的文件头,包含DTD等信息>
    <!DOCTYPE struts-configPUBLiC
    O-//Apache Software Foundation//DTD Struts Configuration
    1.2//EN""http://struts.apache.org/dtds/struts-config_l_2.dtd">
    <!--Struts配置文件的根元素-->
    <struts-config>
    <!--在 form-beans元素里配置所有的ActionForm-->
    <form-beans>
    <!--配置登录所使用的Form-->
    <form-beanname="loginForm"type="org.apache.struts.validator.
    DynaValidatorForm">
    <l一配置 loginForm的两个属性><form-property name="user"
    type="java.lang.String" /><form-property name="pass"
    type="java.lang.String" /></form-bean><!添加消息所用的Form-->
    <form-bean name="addNewsForm" type="org.apache.struts.validator.
    乌'naValidatorForm">
    <!--配置 addNewsForm的三属性-->
    <form-property name="title" type="java.lang.String"
    /><form-property name="content" type="java.lang.String" />
    <form-propertyname="categoryid"type="java.lang.String" />
    </form-bean><l…添加消息评论所用的 Form-->
    <form-bean name="addNewsReviewForm" type="org.apache.struts.
    validator.乌'naValidatorForm">
    <!--配置 addNewsReviewForm 的两个属性…〉
    <form-property name="content" type="java.lang.String"
    /><form-property name="newsld" type="java.lang.String"/>
    </form-bean>
    </form-bean/〉
    <!--配置所有的Action映射--〉
    <action-mappings>
    <!--处理登录--〉
    <action path="/processLogin"
    name="loginForm"
    scope="request"validate="true"
    ~nput="input">
    <forward name="input" path="/index.jsp" /><forward
    name="success" path="/listCate.do" />
    <faction><!-登出系统--〉
    <action path="/logout" scope="request"><forward
    name="success" path="/index.jsp"/><faction>
    <!--进入主页面--〉
    <action path="/listCate" scope="request"><forward
    name="success" path="/main.jsp"/><faction><!根据种类加载所有消息 --〉
    <action path="/loadNewsByCategory" scope="request">
    <forward name="failure" path="/listCate.do"/><forward
    name="success" path="/category_view.jsp"/><faction><!添加消息 -->
    <action path="/addNews"name="addNewsForm"scope=//request"
    validate="true"
    ~nput="input">
    <forward name="failure" path="/loadNewsByCategory.do"/>
    <forward name="success" path="/loadNewsByCategory.do"/>
    <faction>
    <!--根据消息 id加载所有评论->
    <actionpath="/loadNewsReviewByNews"scope="request">
    <forward name="success" path="/news_view.jsp"/>
    <faction>
    <!--添加消息评论--〉
    <action path="/addNewsReview"
    name="addNewsReviewForm"
    scope="request"
    validate="true"
    input="input">
    <forward name="failure" path="/loadNewsReviewByNews.do"/>
    <forward name="success" path="/loadNewsReviewByNews.do"/>
    <faction>
    <faction-mappings>
    <!--配置控制属性-->
    <controller inputForward="true"
    processorClass="org.springframework.web.struts.DelegatingRequest
    Processor"/><!配置国际化的消息资源-->
    <message-resources parameter="resource"/>
    <!-- 配置数据校验的框架--〉
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"value="/WEB-INF/validator-rules.刀口1 ,
    /WEB-INF/validation.泪nl"/>
    <set-property property="stopOnFirstError"value=町 true"/>
    </plug-in><!-配置用于Spring整合的插件框架--〉
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/
    daoContext.xml,
    /WEB-INF/applicationContext.xml,
    /WEB-INF/action-Servlet.xml"/> '
    </plug-in>
    </struts-config>

      这个配置文件与Struts 基本的配置文件并没有太多的不同,区别在于该配置文件的action 元素没有 class 属性,以及使用 DelegatingRequestProcessor 代替了系统默认的RequestProcessor。

      注意:虽然action元素没有确定class属性,但也允许指定class属性,只是不会有任何作用。

      Spring对 Action 的配置采用单独的文件配置action-Servlet.xml,该文件中配置了所有的 Actionbean。

      因为所有的Action都需要为其注入业务逻辑组件,所以此处采用继承简化了Actionbean的配置。具体的配置文件代码如下:

    <?xml version="l.O" encoding="GBK"?>
    <!-- Spring配置文件的文件头,包含DTD等信息--〉
    <lDOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""
    http://www.springframework.org/dtd/spring-beans.dtd">
    <!--Spring配置文件的根元素>
    <beans>
    <!--配置 Action模板,用于被其他Action继承>
    <bean id="actionTemplate" abstract="true"
    singleton="false"><property name="mgr" ref="facadeManager"/></bean>
    <!--处理登录--〉
    <bean name="/processLogin" class="org.yeeku.action.LoginAction"
    parent="actionTemplate"/>
    <!--登出系统〉
    <bean name="/logout"class="org.yeeku.action.Logout"/>
    <'列出所有的消息分类--〉
    <bean name="/listCate"class="org.yeeku.action.ListCate"
    parent="actionTemplate"/>
    <!-- 根据种类列出所有消息--><bean name="/loadNewsByCategory"
    class="org.yeeku.action.LoadNewsByCategory"parent="actionTemplate"/>
    <!添加消息--〉
    <beanname="/addNews" class="org.yeeku.action.
    AddNewsAction"parent="actionTemplate"/>
    <!-- 根据消息查看所有的评论><bean name="/
    loadNewsReviewByNews" class="org.yeeku.action.LoadReviews
    ByNews"parent="actionTemplate"/><1-添加消息评论>
    <bean name="/addNewsReview" class="org.yeeku.action.AddReviewAction"
    parent="actionTemplate"/>
    </beans>


      至此,已经基本完成了Struts与 Spring 的整合。当ActionServlet拦截到用户请求时,则调用 DelegatingRequestProcessor,该处理器将请求转发到Spring容器中的bean,由该bean负责调用业务逻辑组件处理用户请求,井将处理结果呈现给用户。

  • 相关阅读:
    LInux下几种定时器的比较和使用
    R中字符串操作
    GIS基本概念
    特征选择实践
    xcrun: error: invalid active developer path (/Applications/Xcode.app/Contents/Developer)解决办法
    mac os idea的快捷键
    python代码打包发布
    机器学习之聚类
    机器学习之决策树
    机器学习之逻辑回归
  • 原文地址:https://www.cnblogs.com/sailormoon/p/2805711.html
Copyright © 2011-2022 走看看