转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
深入探讨Spring与Struts的集成方案         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1532 更新时间:2009/4/22 23:33:35

  作者:dxaw

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

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

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

  1.首先我们来看一个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集成的方式:

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

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

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

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

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

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

  这种集成方案是从一个公共的能够访问Spring应用上下文的基类中派生所有的Struts Action,但值得庆幸的是:我们不用自己去编写这个知晓Spring应用上下文的基类,因为Spring已经提供了org.springframework.web.struts.ActionSupport:一个org.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)的原则。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台