`

Spring整合struts(一)

    博客分类:
  • java
阅读更多
转自:http://xm-king.javaeye.com/blog/540964

虽然Spring也提供了自己的MVC组件,但一来Spring的MVC组件过于繁琐,二来Struts的拥护者实在太多。因此,很多项目都会选择使用Spring整合Struts框架。而且Spring确实可以无缝整合Struts框架,二者结合成一个更实际的J2EE开发平台。利用Struts的PlugIn来启动Spring容器
      使用Spring的Web应用时,不用手动创建Spring容器,而是通过配置文件声明式地创建Spring容器。因此,在Web应用中创建Spring容器有如下两个方式:
     ● 直接在web.xml文件中配置创建Spring容器。
     ● 利用第三方MVC框架的扩展点,创建Spring容器。
    其实第一种创建Spring容器的方式更加常见。为了让Spring容器随Web应用的启动而自动启动,有如下两个方法:
   ● 利用ServletContextListener实现。
   ● 采用load-on-startup Servlet实现。
   Spring提供ServletContextListener的一个实现ContextLoaderListener,该类可以作为Listener使用,会在创建时自动查找WEB-INF/下的applicationContext.xml文件,因此,如果只有一个配置文件,并且文件名为applicationContext.xml,只需在web.xml文件中增加如下配置片段即可:
<listener>
   <listener-class>org.springframework.web.context.
   ContextLoaderListener</listener-class>
</listener>
     如果有多个配置文件需要载入,则考虑使用<context-param>元素来确定配置文件的文件名。ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置context-param时,参数名字应该是contextConfigLocation。带多个配置文件的web.xml文件如下:
  <?xml version="1.0" encoding="UTF-8"?>

<!-- 指定Web配置文件的根元素,以及相应的Schema信息 -->

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <!-- 采用listener创建ApplicationContext实例 -->
    <listener>
        <listener-class>org.springframework.web.context.
        ContextLoaderListener</listener-class>
    </listener>

    <!-- 确定多个配置文件 -->
    <context-param>
        <!-- 参数名为contextConfigLocation -->
        <param-name>contextConfigLocation</param-name>
        <!-- 多个配置文件之间以“,”隔开 -->
        <param-value>/WEB-INF/daoContext.xml,/WEB-INF/
        applicationContext.xml</param-value>
    </context-param>

</web-app>

    如果没有通过contextConfigLocation指定配置文件,Spring会自动查找application- Context.xml配置文件;如果有contextConfigLocation,
则利用该参数确定的配置文件。如果无法找到合适的配置文件, Spring将无法正常初始化。
     Spring 根据bean定义创建WebApplicationContext对象,并将其保存在web应用的ServletContext中。大部分情况下,应用中的Bean无须感受到ApplicationContext的存在,
只要利用ApplicationContext的IoC即可。如果需要在应用中获取ApplicationContext实例,可以通过如下代码获取:
   //获取当前Web应用的Spring容器
   WebApplicationContext ctx =
    WebApplicationContextUtils.getWebApplicationContext(servletContext);
     除此之外,Spring提供了一个特殊的Servlet类ContextLoaderServlet。该Servlet在启动时,会自动查找WEB-INF/下的applicationContext.xml文件。
当然,为了让ContextLoaderServlet随应用的启动而启动,应将此Servlet配置成load-on-startup的Servlet,load-on-startup的值小一点比较合适,
这样可以保证Application- Context更快的初始化。如果只有一个配置文件,并且文件名为applicationContext.xml,在web.xml文件中增加如下一段即可:

<servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

     该Servlet用于提供“后台”服务,主要用于创建Spring容器,无须响应客户请求,因此无须配置servlet-mapping。
     如果有多个配置文件,一样使用<context-param>元素来确定多个配置文件。
      事实上,不管是ContextLoaderServlet,还是ContextLoaderListener,都依赖于ContextLoader创建ApplicationContext实例。
   在ContextLoader代码的第240行,有如下代码:
   String configLocation = servletContext.getInitParameter
   (CONFIG_LOCATION_PARAM);
   if (configLocation != null) {
    wac.setConfigLocations(StringUtils.tokenizeToStringArray(configLocation,
    ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS));
  }
     其中,CONFIG_LOCATION_PARAM是该类的常量,其值为contextConfigLocation。可以看出,ContextLoader首先检查servletContext中是否有contextConfigLocation的参数,如果有该参数,则加载该参数指定的配置文件。
     ContextLoaderServlet与ContextLoaderListener底层都依赖于ContextLoader。因此,二者的效果几乎没有区别。之间的区别不是它们本身引起的,而是由于Servlet规范,Listener比Servlet优先加载。因此,采用ContextLoaderListener创建ApplicationContext的时机更早。
     当然,也可以通过ServletContext的getAttribute方法获取ApplicationContext。但使用WebApplicationContextUtils类更便捷,因为无须记住ApplicationContext的属性名。即使ServletContext的WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRI-BUTE属性没有对应对象,WebApplicationContextUtils的getWebApplicationContext()方法将会返回空,而不会引起异常。
到底需要使用Listener,还是使用load-on-startupServlet来创建Spring容器呢?通常推荐使用Listener来创建Spring容器。但Listerner是Servlet2.3以上才支持的标准,因此,必须Web容器支持Listener才可使用Listerner。
注意:使用Listener创建Spring容器之前,应先评估Web容器是否支持Listener标准。
     还有一种情况,利用第三方MVC框架的扩展点来创建Spring容器,比如Struts。在第2章介绍Strust框架时,知道Struts有一个扩展点PlugIn。
     实际上,Spring正是利用了PlugIn这个扩展点,从而提供与Struts的整合。  Spring提供了PlugIn接口的实现类  org.springframework.web.struts.ContextLoaderPlugIn。这个实现类可作为Struts的PlugIn配置,Struts框架启动时,将自动创建Spring容器。
为了利用Struts的PlugIn创建Spring容器,只需在Struts配置文件中增加如下片段   即可:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation"
     value="/WEB-INF/action-servlet.xml,/WEB-INF/applicationContext.xml"/>
</plug-in>
其中,指定contextConfigLocation属性值时,即可以指定一个Spring配置文件的位置,可以指定多个Spring配置文件的位置。
分享到:
评论

相关推荐

    Spring整合Struts

    ### Spring与Struts的整合:实现灵活的企业级应用开发 在企业级应用开发领域,Spring框架和Struts框架都是极具影响力的技术。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,提供了良好的环境管理和...

    Spring + struts 整合的三种主要方式

    使用Spring的`ActionSupport`是一种非常常见的整合方式,它允许我们利用Spring框架的功能来增强Struts框架。具体实现方法是让自定义的Action继承自`org.springframework.web.struts.ActionSupport`类,这样就可以在...

    使用Spring整合Struts编写多页面用户注册模块

    在整合Spring和Struts时,我们需要配置Spring的ApplicationContext,这通常是一个XML文件,其中定义了bean的声明和它们之间的依赖关系。这些bean可能包括DAO(数据访问对象)、Service层以及Struts的Action类。...

    Spring整合集成Struts1.2最简单例子

    将Spring与Struts1.2整合,可以利用Spring的强大功能来管理Struts的Action和业务逻辑,提高代码的可测试性和可维护性。 4. **整合步骤** - **配置Spring**:首先创建Spring配置文件(如`applicationContext.xml`...

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

    1. **Spring整合** - 在MyEclipse中添加Spring支持,选择相应的Spring版本和开发包,如Spring 1.2系列。 - 创建Spring配置文件(如`applicationContext.xml`),配置Bean定义,包括Service层、DAO层以及Action类等...

    整合struts2和spring

    整合Struts2和Spring主要涉及以下几个关键步骤: 1. **添加依赖**:首先,需要在项目的构建配置文件(如Maven的pom.xml或Gradle的build.gradle)中添加Struts2和Spring的相关依赖库。这通常包括struts2-core、...

    spring整合struts的jar文件

    spring框架整合struts框架时必需的类库文件

    spring与struts2整合

    Spring 和 Struts2 是两个...总之,Spring 和 Struts2 的整合利用了两者的优势,提供了一种强大的方式来构建可扩展、易于维护的 Java Web 应用。通过深入学习和实践,开发者可以掌握这种整合技巧,并在实际项目中应用。

    Spring整合Struts2

    本文将详细探讨如何整合Spring与Struts2,以及在整合过程中所需的最少jar包。 首先,理解Spring和Struts2的核心概念: 1. **Spring框架**:Spring通过提供IoC(Inversion of Control)容器来管理对象的生命周期和...

    Spring与struts整合开发实例

    Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。

    spring整合struts.rar

    整合 Spring 和 Struts 的主要目标是利用 Spring 的 IoC(Inversion of Control,控制反转)和 AOP 来管理和控制 Struts2 的动作类(Action),同时利用 Struts2 的 MVC 模式处理 Web 请求和展示视图。以下是整合...

    struts1和spring整合

    Struts1 和 Spring 整合是 Java Web 开发中常见的一种技术组合,它们分别作为 MVC 框架和依赖注入框架,共同提升了应用的可维护性和可扩展性。Struts1 提供了强大的控制器层,而 Spring 提供了业务逻辑处理和依赖...

    Spring与Struts 2整合.zip

    在"Spring与Struts 2整合.zip"这个压缩包中,可能包含了一系列的配置文件、源代码和示例项目,帮助开发者了解和学习如何将这两个框架有效地结合在一起。通过学习和实践这些材料,开发者可以掌握在实际项目中整合...

    整合Spring与Struts的几种方法

    Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,以及对其他框架的良好集成,而Struts则是一个专注于MVC模式的轻量级框架。在整合两者时,主要目标是让Spring管理Struts的Action实例,这样可以利用Spring...

    Spring与Struts2整合

    3. **整合Struts2-Spring插件** 引入Struts2的Spring插件,该插件使得Spring管理的Action类可以在Struts2中直接使用。在struts.xml配置文件中启用该插件。 4. **Action类的配置** 创建Spring管理的Action类,通常...

    spring+struts2+ibatis整合的jar包

    总的来说,Spring、Struts2和iBatis的整合为Java Web开发提供了一个强大、灵活的解决方案,让开发者能够更专注于业务逻辑,而不是框架的底层实现。通过合理的配置和使用这个jar包,开发者可以快速构建出稳定、高性能...

    spring_struts_hibernate整合开发书籍

    《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...

    spring 整合 struts 文档

    #### 一、Spring 整合 Struts 框架概述 在Java Web开发领域,Spring 和 Struts 是非常流行的技术框架。Spring 提供了一个强大的轻量级框架来解决企业应用开发中的各种问题,而Struts则是一个基于MVC模式的Web应用...

    struts和spring整合的2种方式

    本文将详细介绍两种整合Struts1与Spring的方法。 首先,我们需要理解这两个框架的基本概念。Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它专注于控制层,处理用户请求并转发到相应的...

Global site tag (gtag.js) - Google Analytics