科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道深入探讨Spring与Struts的集成方案

深入探讨Spring与Struts的集成方案

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器。它力图简化J2EE开发即J2EE without EJB。

作者:builder.com.cn 来源:赛迪网 2007年10月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

4.实现第二种集成方案:代理和委托Action。

  这种集成方案要求我们编写一个Struts Action,但它只不过是一个包含在Spring应用上下文中的真正Struts Action的一个代理。该代理Action从Struts插件ContextLoaderPlugIn中获取应用上下文,从中查找真正的Struts Action,然后将处理委托给真正的Struts Action。这个方法的幽雅之处在于:只有代理action才会包含Spring特定的处理。真正的Action可以作为org.apache.struts.Action的子类来编写。

  下面我们来看一段在之中集成方式下的Struts Action源代码:

public class CourceAction extends Action {
private CourceService courceService;
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
Set allCources = courceService.getAllCources();
request.setAttribute("cources", allCources);
//..........the other statements.
return mapping.findForward("jspView");
}
/* 注入CourceService */
public void setCourceService(CourceService courceService) {
this.courceService = courceService;
}}

  分析:大家可以看到,在这种方式之下,我们的Struts Action类和Spring是低耦合的,它仅仅依赖了Spring提供的反向控制(IoC)机制把CourceService注入到了我们的Action中。到此,大家肯定会有一个疑问:那就是Spring到底是如何提供IoC反向控制的呢?回答这个问题,我们需要完成两个步骤的配置:

  (1).在struts-config.xml中注册Struts Action。但要注意的是我们在这里注册的是代理Action。幸运的是,我们不必亲自编写这个类。因为Spring已经通过org.springframework.web.struts.DelegatingActionProxy提供了这个代理的Action。具体的配置方法如下:

<action type="org.springframework.web.struts.DelegatingActionProxy" path="/listCourses">

  (2)将真正的Struts Action作为一个Spring Bean并在Spring上下文配置文件中作为一个Bean注册之。并将Action所要引用的courceService注入给它。

<bean class="com.eRedCIP.web.CourceAction" name="/listCourses">
<property name="">
<ref bean="courseService">
</property>
</bean>

  注意:name属性的值是非常重要的,它必须和struts-config.xml中的path属性完全一致。这是因为DelegatingActionProxy会使用path属性值在Spring上下文中查找真正的Action。使用DelegatingActionProxy的好处在于我们可以不使用任何Spring特定的类来编写Struts Action。同时,Struts动作能够利用IoC取得和他合作的对象。唯一不足之处就是不太直观,配置相对复杂。为了使action委托显得更为直观一些,我们可对这种集成方案做进一步的改进:使用请求委托。

  5.使用请求委托。

  为了使action委托看上去更为直观一些,Spring提供了DelegatingRequestProcessor,另一种专门用于Spring的请求处理器。需要在struts-config.xml中做如下配置:

<controller processorclass="org.springframework.web.struts.DelegatingRequestProcessor">

  这样,DelegatingRequestProcessor将告诉Struts自动将动作请求委托给Spring上下文中的Action来处理。这使得我们可以在struts-config.xml中用struts action的真正类型来声明它们。例如:

<action type="com.eRedCIP.web.CourceAction" path="/listCourses">

  当接受到一个针对/listCourses的请求时,DelegatingRequestProcessor会自动从Spring上下文配置文件中查找一个名为/listCourses的Bean(实为一个Struts Action)类。

<action type="com.eRedCIP.web.CourceAction" path="/listCourses">
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章