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

Spring与第三方MVC框架集成(Struts)详解

    博客分类:
  • JAVA
阅读更多
一、集成时需要考虑的问题:


        Spring与第三方MVC框架集成时,需要考虑的问题是如何在第三方MVC框架中访问Spring IOC容器管理的Bean,或者说,如何获取Spring IOC容器的实例。我们还要保证在第三方MVC框架开始处理用户请求之前,Spring的IOC容器必须初始化完毕。


二、自动加载Spring的IOC容器的两种方式


1、利用第三方框架的扩展点,实现加载Spring的IOC容器,例如,Struts就提供了Plugin扩展。


2、第二种方式是在web.xml中定义Lisenter或Servlet,让Web应用程序一启动就自动加载Spring的IOC容器。这种方式较为通用,对于一些不太常见的第三方MVC框架也可以用这种方式来尝试与Spring集成。


    这里需要注意,如果正在使用基于Servlet 2.3或更高规范的Web服务器,则应当使用Spring提供的ContextLoaderListener来加载IOC容器,因为根据Servlet2.3规范,所有的Listener都会在Servlet被初始化之前完成初始化。由于我们希望尽可能早地完成Spring IOC容器的初始化,因此采用ContextLoaderListener加载Spring的Ioc容器是最适合的,这时在web.xml中定义如下:



...



<listener>

    <listener-class>

       org.springframework.web.context.ContextLoaderListener

    </listener-class>

</listener>



...



    默认的,ContextLoaderListener会在/WEB-INF/目录下查找名为applicationContext.xml文件,作为Spring的XML配置文件加载。如果使用其他文件名,或者有多个XML配置文件,就需要预先在web.xml文件中的<context-param>标签中指定。


<context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>

           /WEB-INF/config/spring/applicationContext.xml

           /WEB-INF/config/spring/datasource.xml

           /WEB-INF/config/spring/serviceBean.xml

           /WEB-INF/config/spring/actionBean.xml

       </param-value>

</context-param>


    如果正在使用的Web服务器还不支持Servlet 2.3规范,则无法使用Listener,也就无法通过ContextLoaderListener来加载Spring的IOC容器。为些Spring提供了另一个ContextLoaderServlet来加载Spring的IOC容器。


<servlet>

       <servlet-name>SpringContextServlet</servlet-name>

       <servlet-class>

           org.springframework.web.context.ContextLoaderServlet

       </servlet-class>

       <load-on-startup>0</load-on-startup>

    </servlet>


    由于必须加载ContextLoaderServlet,然后再加载其他的Servlet,才能保证Spring的IoC容器在其他Servlet处理用户请求之前初始化完毕,因此,需设置<load-on-startup>为0,表示Web服务器一启动就加载ContextLoaderServlet,其他的Servlet的<load-on-startup>值应设得大一些,保证ContextLoaderServlet有足够的时间初始化Spring的IOC容器。


一旦完成了Spring IOC容器的加载,就可以通过Spring提供的一个辅助类WebApplicationContextUtils来获得Spring IOC容器的实例了。


ApplicationContext ctx=

WebApplicationContextUtils.getWebApplicationContext(servlet.getServletContext());



三、Spring与Struts的集成


方式一:


    第一种方案是通过Spring提供的一个Struts插件来初始化IOC容器,然后从Spring提供的ActionSupport派生所有的Aciton,以便能通过 getWebApplicationContext获得Spring IOC容器中所有Bean的实例。


1、  在Struts配置文件的最后添加Spring插件声明:


<struts-config>

<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”/>

</struts-config >


    然后设计一个BaseAction,其中定义了获得业务逻辑接口的方法,其他所有的Action都从BaseAction派生即可非常方便地调用业务逻辑接口,比如。


    public class BaseAction extends ActionSupport{

       public Object getBean(String beanName){

    return (Object) getWebApplicationContext().getBean(beanName);

}

}


     这样,BaseAction就可以随时通过Spring的ApplicationContext获得逻辑组件的引用,所有的Action子类都可以直接通过getBean(String beanName)获得指定组件。

最后一步是编写Spring的XML配置文件,在此配置文件中定义所有的Bean组件,但不包括Struts的Action实例。


<beans>

   <bean name="userService" class="com.springTest.UserServiceImpl"

</bean>

...

</beans>


如果Spring的XML配置文件没有使用默认的文件名,就必须在Struts配置文件中声明Plugin时指定文件位置。


<struts-config>

<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>

<set-property property="contextConfigLocation" value="/WEB-INF/config/spring/mySpringConfig.xml "/>

</plug-in>

</struts-config >



    这种方式集成Spring和Struts时,如果合理地抽象出一个类似BaseAction的类作为所有Action类的超类,在集成到Spring时,只需将BaseAction的超类从Struts的Action类改为Spring提供的ActionSupport,然后在Struts中声明Spring的Plugin,就可以在不修改任何Action的情况下实现和Spring的集成。



方式二:


    第二种集成Struts的方案是将Struts的所有Action都作为Spring IOC容器中的Bean来管理,然后通过Spring提供的DelegatingRequestProcessor来替代Struts的默认派发器,以便让Spring能截获派发给Action的请求。在这种方式下,业务逻辑组件通过依赖注入的方式在Spring的IOC容器中就配置完毕了。



    设计一个BaseAction,其中定义了获得业务逻辑接口的方法,其他所有的Action都从BaseAction派生即可非常方便地调用业务逻辑接口,比如。


    public class BaseAction extends Action{

private UserService userService;

public void setUserService(UserService userService){

    this.userService=userService;

}



public UserService getUserService(){

    return userService;

}



}



在Struts配置文件的最后添加Spring提供的DelegatingRequestProcessor和插件声明:


<struts-config>

...

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn" />

</struts-config >


同理,如果Spring的XML配置文件没有使用默认的文件名,就必须在Struts配置文件中声明Plugin时指定文件位置。
<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
<set-property property="contextConfigLocation" value="/WEB-INF/config/spring/mySpringConfig.xml "/>
</plug-in>

    Spring提供的Struts插件仍负责启动Spring容器,而DelegatingRequestProcessor可以让Spring接管请求,从而将请求派发到IOC容器管理的Action实例。为此,在Spring的XML配置文件中,除了定义业务逻辑和其他组件外,还必须声明每一个Action类,其name属性和Struts配置文件中的path要完全一致。假设在Struts配置文件中配置了两个Action:


<action-mappings>

        <action path="/login" type="com.struts.LoginAction"

                name="loginForm" scope="request" validate="true" input="/login.jsp">

            <forward name="success" path="/hello.jsp" />

            <forward name="failure" path="/login.jsp" />

        </action>

        <action path="/logout" type="com.struts.LogoutAction">

            <forward name="success" path="/login.jsp" />

        </action>

    </action-mappings>


    则在Spring的配置文件中,除了定义UserService组件外,还必须定义两个Action,并且要和Struts配置文件中的Action一一对应。


<bean id="userService" class="com.testSpring.UserServiceImpl" />



    <bean name="/login" class="com.struts.LoginAction">

        <property name="userService" ref="userService" />

    </bean>



    <bean name="/logout" class="com.struts.LogoutAction">

        <property name="userService" ref="userService" />

</bean>


    实际上,使用这种方式实现集成,Struts配置文件中Action的type属性将被忽略,因为Spring会根据path属性查找对应name的Action Bean。但是,仍然建议将type属性标识出来,便于查看URL和Action的关联。使用这种方式时,由于Action被作为Bean纳入Spring的IOC容器管理,因此,可以获得完全的依赖注入能力。不过,最大的不便是所有的Action必须同时在Spring配置文件和Struts配置文件中各配置一次。
    具体选择哪种方式集成要看具体应用,个人认为第二种比较常用。
分享到:
评论

相关推荐

    Struts VS Spring两种MVC框架比较

    ### Struts与Spring:两种MVC框架的比较 在Java Web开发领域中,MVC(Model-View-Controller)架构模式被广泛应用于构建灵活、可维护的Web应用程序。本文将对比分析Struts与Spring这两种流行的MVC框架,帮助开发者...

    Spring集成Struts与Hibernate入门详解

    Spring集成Struts与Hibernate入门详解 Spring框架是Java平台上一个开源的轻量级框架,它提供了许多功能强大且灵活的模块,以帮助开发者快速构建企业级应用程序。Struts是Apache软件基金会的一个开源项目,提供了一...

    对比分析Struts和Spring两种MVC框架参照.pdf

    【Struts MVC框架详解】 Struts是Apache软件基金会Jakarta项目的一个重要组成部分,由Craig R. McClanahan主导设计和开发。作为Java Web MVC框架的先驱,Struts在过去五年间逐渐成熟,成为市场占有率最高的MVC框架...

    struts2 spring hibernate框架技术与项目实战 光盘源码上

    在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 上"提供了这三大框架的实践项目代码,帮助开发者深入理解并掌握它们的集成与应用。 Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP...

    Spring_MVC_框架搭建及详解

    SpringMVC与其他WebMVC框架如Struts2相比,具有一些显著的优点。例如,它天然支持REST风格的URL,同时拥有更为灵活的处理流程和更好的测试支持。此外,SpringMVC可以无缝整合Spring框架的其他组件,如Spring ...

    Jpa+Spring+Struts集成步骤详解

    在Java Web开发中,JPA(Java Persistence API)、Spring框架和Struts框架是常见的三大组件,它们分别负责数据持久化、依赖注入与控制层管理。将这三个组件集成在一起可以构建出高效、稳定的企业级应用。下面,我们...

    struts2框架详解

    - **struts2-spring-plugin**: 与Spring框架集成,实现依赖注入。 - **struts2-config-browser-plugin**: 提供图形化配置浏览器,方便查看和调试配置。 3. **MVC模式** - Model:业务逻辑模型,处理数据。 - ...

    对比分析Struts和Spring两种MVC框架.pdf

    【Spring MVC 框架详解】 Spring,由 Rod Johnson 在其著作《Expert One-on-One J2EE Design and Development》中提出的设计理念实现,是一个全面的、模块化的应用框架。Spring MVC 是 Spring 框架的一部分,它提供...

    ssh框架整合详细步骤(spring+struts2+hibernate)

    ##### 第一部分:Web工程集成Struts2框架 **Step01:创建Web工程** - 在开发环境中创建一个新的Web工程,如Eclipse或IntelliJ IDEA中通过New -&gt; Web Project创建。 **Step02:完成Web工程与Struts2的整合开发** -...

    spring mvc过程详解

    4. **集成性**:Spring MVC 完美地集成到 Spring 生态系统中,使得与其他 Spring 组件如 Spring Security、Spring Data 的整合变得非常容易。 #### 二、Spring MVC 核心组件 Spring MVC 的核心组件包括但不限于: ...

    SSH(Struts1.0+Spring+Hibernate)框架集成笔记

    ### SSH(Struts1.0+Spring+Hibernate)框架集成笔记 #### 一、概述 SSH框架集成,即Struts1.0 + Spring + Hibernate框架的整合应用,是Java Web开发中较为复杂的集成模式之一。它集合了MVC设计模式(通过Struts...

    spring集成Struts与Hibernate

    ### Spring集成Struts与Hibernate详解 #### Spring集成Struts **背景介绍** 随着Java技术的发展,Struts作为最早的MVC框架之一,在Java EE领域中占据了重要地位。虽然随着时间的推移,新的框架和技术不断涌现,但...

    spring+struts2+mybatis三大框架集成实现用户的增删改查入门操作案例

    【SSM框架集成详解】 在Java Web开发领域,Spring、Struts2和MyBatis是三个非常重要的组件,它们各自负责不同的职责,并通过巧妙的整合,构建出强大的企业级应用框架。本案例主要讲解如何将这三大框架集成,实现...

    struts2+hibernate+spring三大框架技术

    ### Struts2+Hibernate+Spring三大框架技术 #### Struts2 框架技术 **MVC概述** MVC(Model-View-Controller)是一种软件架构设计模式,它将应用程序分为三个基本部分:模型(Model)、视图(View)与控制器...

    spring、struts、ibatis框架搭建流程

    ### Spring、Struts、iBatis框架搭建流程详解 #### 一、框架下载与准备 在构建基于Spring、Struts和iBatis的项目时,首先需要下载这些框架的最新版本,并进行相应的准备工作。 ##### 1. Struts2框架 Struts2是一...

    Spring+Spring MVC+Struts+hibernate开发摄影平台完整版系统

    《构建摄影平台:Spring+Spring MVC+Struts+Hibernate整合详解》 在现代Web开发领域,Spring框架以其灵活性和强大的企业级应用支持而备受青睐。本项目“Spring+Spring MVC+Struts+Hibernate开发摄影平台完整版系统...

    Struts+Hibernate+Spring+三个框架简介

    ### Struts+Hibernate+Spring+三个框架简介 #### 一、Struts框架详解 **Struts** 是一个基于 Java 的开源框架,它主要用于构建 Web 应用程序,并且遵循 MVC(Model-View-Controller)设计模式。Struts 架构清晰,...

    spring-mybatis-struts2-master ——demo

    《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...

    Struts.2.Hibernate.Spring整合开发技术详解.rar

    Struts 2、Hibernate 和 Spring 是Java开发中最流行的三大开源框架,它们的整合使用被称为SSH(Struts2、Spring、Hibernate)集成开发。这三大框架分别解决了Web应用中的不同问题,Struts 2负责表现层,Spring处理...

Global site tag (gtag.js) - Google Analytics