`

[文档中]Struts与Spring整合

阅读更多

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

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

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

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 部分的底端:

xml 代码
  1. <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>  

你也可以使用这个插件加载所有的配置文件,这在使用测试工具(例如 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.xmlaction-servlet.xml 中的 Action 的桥梁 是 action-mapping 的“path”和 bean 的“name”。如果你在 struts-config.xml 文件中有如下配置:

xml 代码
  1. <action path="/users" .../>  

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

xml 代码
  1. <bean name="/users" .../>  

为了在 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>  

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

xml 代码
  1. <action path="/user" type="com.whatever.struts.UserAction"/>           
  2. <action path="/user"/>  

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

注意

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

如果你有一个自定义的 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-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"/>  

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

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

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

分享到:
评论
1 楼 wm920 2009-01-15  


  写的不错!好久没用了·温习下!

相关推荐

    Struts和Spring整合示例讲解

    在提供的"**Myeclipse中Struts和Spring整合.doc**"文档中,应该包含了详细的步骤指导,包括创建Struts和Spring项目、配置相关XML文件、编写Action和Service等。这份文档对于初学者来说是一份宝贵的资源,它将帮助...

    struts2+ibatis+spring整合开发.doc

    在《struts2+ibatis+spring整合开发》文档中,详细介绍了如何将Struts2、Ibatis与Spring三大框架进行整合,以实现一个高效、可扩展的企业级应用系统。本文将对这份文档的主要内容进行深度解析,并从中提炼出重要的...

    Spring+Struts+Hibernate比较详细的整合配置方案

    在"Spring+Struts+Hibernate比较详细的整合配置方案.doc"文档中,可能包含了如何配置这三大框架以协同工作的详细步骤。通常,配置会涉及以下几个方面: 1. 配置Spring:设置IoC容器的配置文件,定义bean,包括...

    SSH(Struts2.1+Spring2.X+Hibernate3.X)整合,新手必备

    【Struts2.1、Spring3.0、Hibernate3.3整合与S2SH的XML文件拆分.docx】文档则可能专注于XML配置文件的拆分和组织,因为大型项目中,将所有配置集中在一个文件可能导致管理和维护困难。拆分XML文件可以使代码结构更加...

    精通J2EE--Eclipse、Struts、Hibernate及Spring整合应用案例

    ### 精通J2EE--Eclipse、Struts、Hibernate及Spring整合应用案例 #### 知识点概览 1. **J2EE概念及其重要性** 2. **MVC设计模式及其在J2EE中的应用** 3. **Hibernate框架入门及高级应用** 4. **Struts框架的应用及...

    struts2+spring2+hibernate3.1 Hibernate帮助文档

    在Struts2+Spring整合中,Spring负责业务逻辑组件的管理和事务控制,使得应用更易于维护和扩展。同时,Spring的AOP机制可以用来实现如日志、权限检查等通用功能,提高代码复用。 Hibernate框架: Hibernate是Java中...

    Spring+Struts+文档解释=快速了解SpringStruts开发

    在 "Struts 和 Spring 结合使用.doc" 文档中,很可能是详细解释了如何将这两个框架集成的过程,包括以下关键步骤: 1. **配置 Spring**:创建 Spring 的配置文件(如 `applicationContext.xml`),声明需要管理的...

    struts2+hibernate+spring+ibatis.rar

    Struts2、Hibernate、Spring 和 iBatis 是四个在Java Web开发中广泛应用的开源框架,它们的整合常常被称为SSH(Struts2、Spring、Hibernate)或者SHiP(Struts2、Hibernate、iBatis、Spring)。这个"struts2+...

    Struts2+Spring2+Hibernate3 WEB实例.rar

    在"Struts2+Spring2+Hibernate3 WEB实例.doc"文档中,可能涵盖了以下内容: 1. **环境配置**:包括JDK、Tomcat、Struts2、Spring2和Hibernate3的版本选择及安装。 2. **项目结构**:讲解了典型的Maven或Eclipse项目...

    Struts2与Hibernate和Spring组合开发

    在"Hibernate与Struts2和Spring组合开发.pdf"文档中,可能会详细介绍如何配置这三个框架,如何在MyEclipse中创建项目,如何编写Action、DAO和Service层的代码,以及如何通过XML或注解实现组件间的依赖注入。...

    Struts2+Hibernate+Spring入门教程

    在“Struts2+Spring2+Hibernate3 web应用示例.doc”文档中,你可能会找到关于如何配置这三大框架的详细步骤,包括web.xml、struts.xml、spring配置文件(如applicationContext.xml)和hibernate配置文件(如...

    Struts2+Spring3+Hibernate3框架搭建实例

    在"SSH框架搭建说明.docx"文档中,可能会详细讲解如何一步步配置这三个框架,包括添加库依赖、配置web.xml、struts.xml、spring.xml和hibernate.cfg.xml文件,以及编写Action类、Service层和DAO层的代码。...

    ssh+birt整合

    在"struts+spring+hibernate+birt"的整合中,Struts负责处理用户界面和业务逻辑的交互,Spring作为整体的架构协调者,管理各个组件的依赖和生命周期,Hibernate则处理数据持久化,将业务对象与数据库表进行映射。...

    Struts2.0+Hibernate3.1+Spring2.0 全套API和教程

    Spring还包含了Spring MVC模块,可以与Struts2一起构建Web应用,并提供了对Hibernate的支持,使得整合这三个框架变得非常便利。 在提供的API文档中,开发者可以详细了解到这三个框架的类、接口、方法等具体信息,这...

    SSH.rar_s2sh_ssh struts2_ssh+mysql_struts2 hibernate_struts2 mys

    在提供的SSH.doc文档中,可能详细介绍了这些整合过程,包括配置文件的编写、类的设计、数据库的连接以及示例代码等。学习和理解这些内容,对于Java Web开发者来说,能够提升他们在实际项目中的开发能力。

    Structs+Spring+Hibernate快速入门

    在"Struts+Spring+Hibernate快速入门.doc"文档中,你可能会找到关于如何配置这三个框架的详细步骤,包括添加依赖库、创建 strut-config.xml 和 spring-context.xml 配置文件,以及如何在Struts Action中注入Spring...

    ssh2整合实现CRUD

    在提供的ssh.pdf文档中,可能会详细介绍以上步骤的配置细节,包括XML配置文件的编写、Action类的设计、Service和DAO的实现,以及可能出现的问题和解决方案。对于初学者来说,这是一个很好的学习资源,通过阅读和实践...

    spring的pdf

    在这些PDF文档中,我们可以深入学习Spring框架的各种概念和实践应用。 《精通Spring.pdf》可能涵盖了Spring的核心特性,包括依赖注入(DI),它允许开发者通过配置文件或注解来管理对象间的依赖关系,降低耦合度。...

    ssh整合简单示例(myeclipse工程)

    在"ssh整合出现null错误.doc"文档中,可能详细记录了在整合过程中遇到的空指针异常问题。空指针异常通常发生在试图访问或操作一个值为null的对象引用时。这可能是因为缺少必要的依赖注入、对象未正确初始化,或者...

    ssh整合代码

    在提供的"ssh整合.doc"文档中,应该包含了SSH整合的详细步骤、配置文件示例和可能出现的问题及解决方案。压缩包内的其他文件可能是具体实现的代码示例,包括Action、ActionForm、Service、DAO等相关类,以及可能的...

Global site tag (gtag.js) - Google Analytics