Spring与Struts如何整合

SpringStruts如何整合<o:p></o:p>

为了在Struts中加载Spring context,需要在struts-config.xml文件中加入如下部分:
< struts-config>
  < plug-in
         className="org.springframework.web.struts.ContextLoaderPlugIn">
     < set-property property="contextConfigLocation"
         value="/WEB-INF/applicationContext.xml" />
  < /plug-in>
< /struts-config>

   
通过Strutsplug-inStrutsSpring之间提供了良好的结合点。通过plug-in我们实现了Spring context的加载,不过仅仅加载Spring context并没有什么实际的意义,还应该经过配置将StrutsAction交给Spring容器进行管理。
< action-mappings>
  < action path="/login"
             type="org.springframework.web.struts.DelegatingActionProxy"
             name="loginForm">
      < forward name="success" path="/main.jsp" />
      < forward name="failure" path="/login.jsp" />
< /action>
   
form bean这个节点上与传统的Struts配置没有什么区别,而在Action上面则发生了变化。在传统的action节点上type属性写入action类的完整类名,而和Spring结合后在这点上是使用了Spring提供的DelegatingActionProxy作为actiontype属性,DelegatingActionProxy同样是org.apache.struts.action.Action的一个子类,它将把调用请求转交给真正的Action实现。通过这样的方式,Spring获得了Action实例的管理权,它将对Action进行调度,并为Struts提供所需的Action实例。这样,就可以将Action看作是Spring的一个bean,它就可以享受Spring的所有服务,如依赖注入、实例管理、事务管理等。
   
applicationContext.xml中相应的配置如下的节点:
< beans>
.......
    < bean name="/login" class="net.xiaxin.action.LoginAction"
                           singleton="false">
        < property name="userDAO">
           < ref bean="userDAOProxy" />
        < /property>
    < /bean>
< /beans><o:p></o:p>

这样委托以后,修改Struts-config.xml中的action属性,使actiontype值不指向具体的实现类,统一改为代理类type="org.springframework.web.struts.DelegatingActionProxy",在applicationContext.xml中的bean name值设定与Struts-config.xmlaction path值一样,以使代理类能够根据传入的pathspringContext环境中找到相应的bean,并将实例返回给Struts。由于动作是在Spring控制之下,所以Spring可以利用Struts所有功能。由于Spring反转控制特性,使Struts根本感觉不到Spring的存在,并且可以利用Spring动作管理框架的所有优点,比如日志拦截、数据校验、线程安全。
    最后这个bean的配置是关键,这个名为“/login”beanStruts中的
< action path="/login" ……>
……
< /action>
节点相对应,这样,Spring Bean NameStruts Action Path相关联,当Struts加载对应的Action时,DelegatingActionProxy就根据传入的path属性,在Spring Context寻找对应bean,并将其实例返回给Struts。与此同时,还可以看到,"/login" bean 中包含了一个userDAO 引用,Spring 在运行期将根据配置为其提供userDAO 实例,以及围绕userDAO 的事务管理服务。这样一来,对于Struts 开发而言,我们既可以延续Struts 的开发流程,也可以享受Spring 提供的事务管
理服务。而bean 的另外一个属性singleton="false",指明了Action 的实例获取方式为每次重新创建。这也解决了Struts中令人诟病的线程安全问题。
   
至此,SS组合已经将Struts MVC以及Spring中的Bean管理、事务管理融为一体。如
果算上userDAO 中的Hibernate 部分,我们就获得了一个全面、成熟、高效、自顶而下的
Web
开发框架。<o:p></o:p>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值