`
lbxhappy
  • 浏览: 307407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring2.0与struts1.x 整合方法!

    博客分类:
  • j2ee
阅读更多
spring2.0与struts1.x 整合三种方法!
2008-09-03 10:20
1. Struts
Struts 是 应用最广的 Java Web 开发框架,主要是因为它是最先发行的几个框架之一(2001年6月)。这个框架由 Craig McClanahan 开发完成,现在作为 Apache 软件基金会的一个开源项目。 当时,它极大地简化了 JSP/Servlet 编程范例并且赢得了 大多数正在使用私人框架的开发人员的亲睐。它简化了编程模型,它是开源的,它具有一个庞大的社区,这些都使得这个项目快速成长,同时变得越来越流行。

要将 Struts 与 Spring 集成,你有两个选择:

一:配置 Spring 将 Action 作为 bean 托管,使用 ContextLoaderPlugin, 并且在 Spring context中设置依赖关系。

二:继承 Spring 的 ActionSupport 类并且 使用getWebApplicationContext() 方法获取 Spring 管理的 bean。


1.1. ContextLoaderPlugin
ContextLoaderPlugin 是 Struts 1.1+ 的插件,用来为 Struts 的 ActionServlet 加载 Spring context文件。 这个context引用 WebApplicationContext (由 ContextLoaderListener 加载) 作为它的父类。默认的context文件是映射的 Servlet 的名字,加上 -servlet.xml后缀。 如果 ActionServlet 在 web.xml 里面的定义是 <servlet-name>action</servlet-name>, 那么默认的文件就是 /WEB-INF/action-servlet.xml。

要配置这个插件,请把下面的 XML 贴到 struts-config.xml 文件中 plug-ins 部分的底端:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>
context配置文件的位置可以通过 contextConfigLocation属性来自定义。

Xml代码 复制代码

   1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> 
   2.   <set-property property="contextConfigLocation" 
   3.       value="/WEB-INF/action-servlet.xml.xml,/WEB-INF/applicationContext.xml"/> 
   4. </plug-in> 

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation"
      value="/WEB-INF/action-servlet.xml.xml,/WEB-INF/applicationContext.xml"/>
</plug-in>



你也可以使用这个插件加载所有的配置文件,这在使用测试工具(例如 StrutsTestCase)的时候特别有用。 StrutsTestCase 的 MockStrutsTestCase 不会在启动的时候初始化 Listener,将你所有的配置文件放在plug-in里面是一种解决方案。(有个 已记录的 bug 就是针对这个问题的,但是已经被标记为“无须改正”)。

在 struts-config.xml 中配置好插件以后,你可以配置Sping来管理 Action。Spring (1.1.3以后的版本) 提供下面两种方式:

一:用 Spring 的DelegatingRequestProcessor重载 Struts 默认的 RequestProcessor 。

二:将 <action-mapping> 的 type 属性设为 DelegatingActionProxy。

这两种方法都允许你在 action-context.xml 文件中管理你的 Action 以及依赖关系。 连接 struts-config.xml 和 action-servlet.xml 中的 Action 的桥梁 是 action-mapping 的“path”和 bean 的“name”。如果你在 struts-config.xml 文件中有如下配置:

<action path="/users" .../>
你必须在 action-servlet.xml 中将 Action bean 的名字定义为 “/users”:

<bean name="/users" .../>


1.1.1. DelegatingRequestProcessor
为了在 struts-config.xml 文件中配置 DelegatingRequestProcessor,你需要重载 <controller> 元素的 “processorClass” 属性。 下面的几行应该放在 <action-mapping> 元素的后面。

Xml代码 复制代码

   1. <controller> 
   2.   <set-property property="processorClass" 
   3.       value="org.springframework.web.struts.DelegatingRequestProcessor"/> 
   4. </controller> 

<controller>
  <set-property property="processorClass"
      value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>


增加这些设置之后,不管你查询任何类型的 Action,Sping都自动在它的context配置文件中寻找。 实际上,你甚至不需要指定类型。下面两个代码片断都可以工作:

<action path="/user" type="com.whatever.struts.UserAction"/>
<action path="/user"/>
如果你使用 Struts 的 modules 特性,你的 bean 命名必须含有 module 的前缀。 举个例子,如果一个 Action 的定义为 <action path="/user"/>,而且它的 module 前缀为“admin”, 那么它应该对应名为 <bean name="/admin/user"/> 的 bean。

Note
如果你在 Struts 应用中使用了 Tiles,你需要配置 <controller> 为 DelegatingTilesRequestProcessor。



1.1.2. DelegatingActionProxy
如果你有一个自定义的 RequestProcessor 并且不能够使用 DelegatingRequestProcessor 或者 DelegatingTilesRequestProcessor,你可以使用 DelegatingActionProxy 作为你 action-mapping 中的类型。

Xml代码 复制代码

   1. <action path="/user" type="org.springframework.web.struts.DelegatingActionProxy" 
   2.     name="userForm" scope="request" validate="false" parameter="method"> 
   3.   <forward name="list" path="/userList.jsp"/> 
   4.   <forward name="edit" path="/userForm.jsp"/> 
   5. </action> 

<action path="/user" type="org.springframework.web.struts.DelegatingActionProxy"
    name="userForm" scope="request" validate="false" parameter="method">
  <forward name="list" path="/userList.jsp"/>
  <forward name="edit" path="/userForm.jsp"/>
</action>



action-servlet.xml 文件中的bean定义依然不变,不管你使用了自定义的 RequestProcessor 还是 DelegatingActionProxy。

如果你把 Action 定义在Spring的context文件里,那么 Spring bean 容器的所有特性都可用了:比如,依赖注入,再比如,为每个请求初始化一个新的 Action 实例。 如果要使用这个特性, Action bean 定义中需要声明scope="prototype"。
Xml代码 复制代码

   1. <bean name="/user" scope="prototype" autowire="byName" 
   2.     class="org.example.web.UserAction"/> 

<bean name="/user" scope="prototype" autowire="byName"
    class="org.example.web.UserAction"/>









1.2. ActionSupport 类
需要在web.xml里面加载spring配置文件如:
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
    </context-param>

正如前面提到的,你可以使用 WebApplicationContextUtils 类从 ServletContext 中获得 WebApplicationContext 。 另一个简单的办法是继承 Spring 的 Action 类。举个例子,除了继承 Struts 的 Action 之外,你也可以继承 Spring 的 ActionSupport 类。

ActionSupport 类提供了一些便利的方法,例如 getWebApplicationContext()。 下面的例子展示了如何在 Action 中使用它:

Java代码 复制代码

   1. public class UserAction extends DispatchActionSupport {  
   2.  
   3.     public ActionForward execute(ActionMapping mapping,  
   4.                                   ActionForm form,  
   5.                                   HttpServletRequest request,  
   6.                                   HttpServletResponse response) throws Exception {  
   7.         if (log.isDebugEnabled()) {  
   8.              log.debug("entering 'delete' method...");  
   9.          }  
  10.          WebApplicationContext ctx = getWebApplicationContext();  
  11.          UserManager mgr = (UserManager) ctx.getBean("userManager");  
  12.         // talk to manager for business logic  
  13.         return mapping.findForward("success");  
  14.      }  
  15. } 

public class UserAction extends DispatchActionSupport {

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("entering 'delete' method...");
        }
        WebApplicationContext ctx = getWebApplicationContext();
        UserManager mgr = (UserManager) ctx.getBean("userManager");
        // talk to manager for business logic
        return mapping.findForward("success");
    }
}



Spring 包含了所有标准 Struts Action 的子类 - Spring 版本在类名末尾附加了 Support:

ActionSupport,

DispatchActionSupport,

LookupDispatchActionSupport

MappingDispatchActionSupport


你应该选择最适合你项目的集成方式。继承使得你的代码更可靠,并且你确切地知道依赖关系是如何被解析的。 另一方面,使用 ContextLoaderPlugin 允许你方便地在context XML 文件里面增加新的 依赖关系。这两种集成方法,不管哪一种 Spring 都提供了相当好用的选项。
分享到:
评论

相关推荐

    spring2.0与struts1.x 整合三种方法!

    博文链接:https://qqwyy.iteye.com/blog/181991

    Spring2.0整合Struts2.0

    **Spring与Struts2整合** 的主要目标是将Spring的控制反转(IoC)和事务管理能力与Struts2的用户界面和业务逻辑处理相结合。整合后,Spring负责管理Struts2中的Action对象,以及其他的业务和服务层组件,而Struts2则...

    Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)

    Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)

    spring2.0技术手册.pdf

    1. **Struts 2**:Spring 可以很好地与 Struts 2 整合,实现更为灵活的 MVC 架构。Spring 负责管理业务逻辑和服务层,而 Struts 2 负责处理前端请求。 2. **Hibernate**:Spring 与 Hibernate 的结合是经典的 ORM ...

    Struts2.Hibernate3.2.Spring2.0整合

    Struts2、Hibernate3.2和Spring2.0是Java Web开发中三个非常重要的框架,它们的整合在企业级应用中十分常见,旨在提供更高效、灵活和可维护的解决方案。下面将详细介绍这三个框架以及它们整合的核心概念和知识点。 ...

    Struts2.Hibernate3.2.Spring2.0整合续一

    总结来说,"Struts2.Hibernate3.2.Spring2.0整合续一"这个主题主要探讨了如何将这三个强大的框架结合在一起,构建高效、灵活的J2EE应用程序。通过对每个框架的理解和整合技巧的掌握,开发者可以构建出满足复杂业务...

    Struts2.Hibernate3.2.Spring2.0整合项目代码

    Struts2.Hibernate3.2.Spring2.0整合项目代码(包括增删查改功能) jar在:(Struts2.Hibernate3.2.Spring2.0整合项目代码的jar包) 里面下载

    Struts2.0+Spring2.0+Hibernate3.1整合

    完成上述步骤后,就可以进行Struts2.0与Spring2.0的整合测试了。 #### 四、总结 本节主要介绍了如何在MyEclipse 6.0环境下配置Struts2.0,并在此基础上进一步整合Spring2.0。通过以上步骤,可以实现Struts2.0和...

    spring2.0+struts1.2+hibernate3

    提供的"spring2.0和struts1.2和hibernate3集成环境配置指导.doc"文档应该包含了详细的步骤和示例代码,对于初学者来说是非常宝贵的资源。"spring_test.sql"可能包含了一些测试数据的SQL脚本,用于初始化数据库。最后...

    Struts1.x+sping2.0+hibernate3.0

    Struts1.x、Spring2.0 和 Hibernate3.0 是经典的 Java Web 开发框架组合,被称为 SSH(Struts + Spring + Hibernate)。这个组合在过去的十几年里被广泛应用,为开发人员提供了一个强大的、全面的企业级应用解决方案...

    struts2.0 spring2.0 hibernate3.0整合开发快速入门-3

    ### Struts2.0、Spring2.0与Hibernate3.0整合开发快速入门知识点解析 #### 一、Struts2.0与Hibernate3.0整合基础 **知识点1:Struts2.0简介** - **定义**: Struts2是Apache基金会下的一个开源项目,它是一个基于...

    spring2.0 hibernate 3.0 struts1.1 xfire1.2 整合

    这里我们关注的是一个整合了Spring 2.0、Hibernate 3.0、Struts 1.1以及XFire 1.2的项目。这些技术都是Java Web开发中的重要组件,各自在应用程序的不同层面提供服务。 Spring 2.0是Java企业级应用中的一个核心框架...

    struts2.0jar包及struts2.0与spring的整合jar包.rar

    接下来,我们关注Struts2.0与Spring的整合。Spring是一个全面的Java企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)等功能。整合Struts2和Spring的主要目的是实现更灵活的控制层和更好的服务管理。 1. ...

    Spring 2.0 + Struts 1.2 + Hibernate 3.2 + DWR 2.0 的JavaEE应用示例

    总结,该例示注释非常详细,演示Spring托管Hibernate和Struts的Action, 以及Spring的事务声明(包括1.x与2.x的用法)与非事务声明的使用方式。 使用DWR可以方便的使用Spring托管的持久层功能。 目的:希望广大Java...

    org.springframework.web.struts-sources-3.0.4.RELEASE.jar

    《Spring与Struts整合:深入理解org.springframework.web.struts-sources-3.0.4.RELEASE.jar》 在Java Web开发领域,Spring框架以其强大的依赖注入和面向切面编程能力,而Struts则以其优秀的MVC架构模式,共同构建...

    Struts 2.0 + Hibernate 3.2 + Spring 2.0 框架整合.doc

    Struts 2.0、Hibernate 3.2 和 Spring 2.0 是三个非常流行的开源框架,它们分别负责处理Web应用程序中的表现层、持久层和业务层。这三种框架的整合能够提供一个强大的、模块化的开发环境,提高开发效率并简化项目的...

Global site tag (gtag.js) - Google Analytics