知识大全 深入探讨Spring与Struts 的集成方案

Posted

篇首语:殷殷之情俱系华夏,寸寸丹心皆为家国。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 深入探讨Spring与Struts 的集成方案相关的知识,希望对你有一定的参考价值。

深入探讨Spring与Struts 的集成方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器 它力图简化J EE开发即J EE without EJB 而且作为帮助企业级开发的核心支柱 Spring为模型层(OR持久层:Hibernate JDO iBatis等)服务层(EJB JNDI WebService)以及表现层(Struts JSF Velocity)都提供了良好的支持和集成方案  访问Spring官方站

  Jakarta Struts是Apache软件组织提供的一个开源项目 它为Java Web应用提供了基于Model View Controller的MVC框架 尤其适用于开发大型可扩展的Web应用 尽管基于Java的MVC框架层出不穷 事实上Spring的MVC模型也提供了驱动应用系统Web层的能力 但Jakarta Struts仍然是所有这些框架中的佼佼者

  下面 将如何整合这两个J EE领域的经典项目给出两套详尽的集成方案

   首先我们来看一个Spring 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(); // the other statements request setAttribute( cources allCources); return mapping findForward( jspView );

  分析:CourceService为一个业务实现的接口 此接口声明了一系列的业务处理方法 该方法的实现配置为Spring上下问的一个Bean 由此看来 我们大家都可能会产生一个疑问:Struts action如何取得一个包含在Spring上下文中的Bean呢?为了回答这个问题 Spring提供了两种与Struts集成的方式:

  ( ) 从一个知晓Spring上下文的基类派生我们自己的Struts Action类 然后 在派生类中就可以使用super XX()方法来获得一个对Spring受控Bean的引用

  ( ) 将请求委托给作为Spring Bean管理的Struts Action来处理

   注册Spring插件:为了使Struts Action能够访问由Spring管理的Bean 我们就必须要注册一个知道Spring应用上下文的Struts插件 可以在struts config xml中通过如下的方式来完成注册

  < plug in classname= springframework web struts ContextLoadPlugin > < set property value= WEB INF/Yhcip xml property= contextConfigLocation > < /PLUG IN>

  ContextLoadPlugin()负责装载一个Spring应用上下文 (具体的说:是一个WebApplicationContext) value属性值为要加载的配置Spring受控Bean的xml文件的URI

   完成第一种集成方案:实现一个知晓Spring的Action基类

  这种集成方案是从一个公共的能够访问Spring应用上下文的基类中派生所有的Struts Action 但值得庆幸的是:我们不用自己去编写这个知晓Spring应用上下文的基类 因为Spring已经提供了 springframework web struts ActionSupport:一个 apache struts action Action的抽象实现 它重载了setServlet()方法以从ContextLoaderPlugin中获取WebapplicationContext 因此 任何时候我们只需要调用super getBean()方法即可获得一Spring上下文中的一个Bean的引用

  我们再来看一段Action源代码:

  public class CourceAction extends ActionSupport public ActionForward execute( ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws Exception //取得Spring上下文 ApplicationContext context = super getWebApplicationContext(); //取得CourceService Bean CourseService courseService = (CourseService) context getBean( courseService ); Set allCources = courceService getAllCources(); request setAttribute( cources allCources); // the other statements return mapping findForward( jspView );

  分析:这个Action类由ActionSupport派生 当CourceAction需要一个Spring受控Bean时:它首先调用基类的getWebApplicationContext()方法以取得一个Spring应用上下文的引用;接着它调用getBean()方法来获取由Spring管理的courceService Bean的一个引用

  小结

  至此 我们已经用第一种方案圆满的完成了Spring与Struts的集成工作 这种集成方式的好处在于直观简洁容易上手 除了需要从ActionSupport中派生 以及需要从应用上下文中获取Bean之外 其他都与在非Spring的Struts中编写和配置Action的方法相似 但这种集成方案也有不利的一面 最为显著的是:我们的Action类将直接使用Spring提供的特定类 这样会使我们的Struts Action(即控制层)的代码与Spring紧密耦合在一起 这是我们不情愿看到的 另外 Action类也负责查找由Spring管理的Bean 这违背了反向控制(IoC)的原则

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

  这种集成方案要求我们编写一个Struts Action 但它只不过是一个包含在Spring应用上下文中的真正Struts Action的一个代理 该代理Action从Struts插件ContextLoaderPlugIn中获取应用上下文 从中查找真正的Struts Action 然后将处理委托给真正的Struts Action 这个方法的幽雅之处在于:只有代理action才会包含Spring特定的处理 真正的Action可以作为 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) urceService = courceService;

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

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

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

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

  < bean class= 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委托显得更为直观一些 我们可对这种集成方案做进一步的改进:使用请求委托

   使用请求委托

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

  < controller processorclass= springframework web struts DelegatingRequestProcessor >

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

  < action type= eRedCIP web CourceAction path= /listCourses >

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

cha138/Article/program/Java/ky/201311/28264

相关参考

知识大全 实例说明如何集成Spring和Struts

实例说明如何集成Spring和Struts  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文想

知识大全 Spring与Struts的结合运用

Spring与Struts的结合运用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Jakart

知识大全 Spring MVC与struts比较

SpringMVC与struts比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下面的内容只

知识大全 CXF与spring集成

CXF与spring集成  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  .新建webprojec

知识大全 集成Spring与BEA WebLogic Server

集成Spring与BEAWebLogicServer  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Struts与Velocity的简单集成

Struts与Velocity的简单集成  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  先当然是

知识大全 spring struts2 ibatis框架整合开发

这里主要介绍一下spring+struts+ibatis所需要的jar包文件spring所需包  以上包为spring配置基本包ibatis所需包  有解决方法的朋友们希望能回复  与struts整合

知识大全 Struts与Velocity集成 五个步骤替代JSP

Struts与Velocity集成五个步骤替代JSP  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 struts2与freemarker的集成

  将freemarker的jar包添加到项目中  创建Action类   Java代码   //此处的Configuration是free

知识大全 深入分析JSF与Struts的异同[2]

Java进阶:深入分析JSF与Struts的异同[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧