`
blues1021
  • 浏览: 141298 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

《转改》Struts2和Spring的集成原理

    博客分类:
  • SSH
 
阅读更多

2009年09月02日 星期三 下午 01:18

Struts 2框架整合Spring很简单,下面是整合的步骤。

1.复制文件 。复制struts2-spring-plugin-x-x-x.jar和spring.jar到WEB-INF/lib目录下。其中的x对应了Spring的版本号。还需要复制commons-logging.jar文件到WEB-INF/lib目录下。

2.配置struts.objectFactory属性值 。在struts.properties中设置struts.objectFactory属性值:

struts.objectFactory = spring

或者在XML文件中进行常量配置:

<struts>

       <constant name="struts.objectFactory" value="spring" />

       ...

</struts>

3.配置Spring监听器 。在web.xml文件中增加如下内容:

<listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

4.Spring配置文件 。默认情况下,Spring配置文件为applicationContext.xml,该文件需要保存在Web应用的WEB-INF目录下。内容示例如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

       "-//SPRING//DTD BEAN//EN"

       "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

       <bean id="personManager" class="com.acme.PersonManager"/>

</beans>

开发者实际上可以使用多个Spring配置文件,在web.xml中进行下列设置,从而使Spring的ApplicationContext通过匹配所给定模式的文件来初始化对象:

<!-- 用来定位Spring XML文件的上下文配置 -->

<context-param>

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

       <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml </param-value>

</context-param>

5.修改Struts配置文件 。Struts 2框架整合Spring框架,需要在Struts配置文件中有所改变,下面是一个示例:

<!DOCTYPE struts PUBLIC

       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

       "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

       <include file="struts-default.xml" />

       <package name="default" extends="struts-default">

           <action name="foo" class="com.acme.Foo">

               <result>foo.ftl</result>

           </action>

       </package>

       <package name="secure" namespace="/secure" extends="default">

           <action name="bar" class="bar ">

               <result>bar.ftl</result>

           </action>

       </package>

</struts>

该配置文件中定义了两个Action配置:foo是一个标准的Struts 2框架Action配置,指定了Action实现类为com.acme.Foo;bar对应的class并不存在,那么框架将在Spring配置文件中查找id属性为“bar”的定义 ,该配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

       "-//SPRING//DTD BEAN//EN"

       "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

       <bean id="bar" class="com.my.BarClass" singleton="false"/>

<!--1.关联到struts中,若没有可以用struts-plugin.xml( truts2-spring-plugin-x-x-x.jar中定义) 来给struts处理-->

       ...

</beans>
 
整合原理

Struts2与Spring的集成要用到Spring插件包struts2-spring-plugin-x-x-x.jar,这个包是同Struts2一起发布的。Spring 插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,它会用Struts2 配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到,则由Spring创建,否则由Struts 2框架自身创建然后由Spring来装配 。Spring插件具体有如下几个作用:

— 允许Spring创建Action、Interceptror和Result。

— 由Struts创建的对象能够被Spring装配。

— 如果没有使用Spring ObjectFactory,提供了2个拦截器来自动装配action

 

开发者不必在Spring中去注册action,尽管可以这么去做,通常Struts框架会自动地从action mapping中创建action对象

 

struts2-spring-plugin-x-x-x.jar插件中有一个struts-plugin.xml文件,该文件内容如下所示:

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

  <!--定义的name=“spring"( struts-plugin.xml中) 是对象生成工厂,可装载Action类(装载的也可为struts创建)-->

 

    <!--  设置Spring对象工厂为自动 -->

    <constant name="struts.objectFactory" value="spring" />

    <package name="spring-default">

        <interceptors>

            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

            <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>

        </interceptors>

    </package>   

</struts>

其中设置了Struts 2框架常量struts.objectFactory的值为spring,实际上,spring是org.apache.struts2.spring.StrutsSpringObjectFactory类的缩写,默认情况下所有由Struts 2框架创建的对象都是由ObjectFactory实例化的 ,ObjectFactory 提供了与其他IoC容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或者它的任 何子类,并且要带有一个不带参数的构造方法。在这里用org.apache.struts2.spring.StrutsSpring ObjectFactory代替了默认的ObjectFactory。

如果Action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配Action,默认情况下框架使用的自动装配策略是name ,也就是说框架会去Spring中寻找与Action属性名字相同的bean,可选的装配策略还有:type、auto、constructor,开发者可以通过常量struts.objectFactory.spring.autoWire来进行设置。 

Struts 2框架整合Spring后,处理用户请求的Action并不是Struts框架创建的,而是由Spring插件创建的。创建实例时,不是利用配置Action时指定的class属性值,根据bean的配置id属性,从Spring容器中获得相应的实例。

分享到:
评论

相关推荐

    struts2与spring2的整合

    Struts2和Spring是两个非常重要的Java开源框架,它们分别在MVC(Model-View-Controller)架构和依赖注入(Dependency Injection,DI)方面发挥着关键作用。将这两个框架整合在一起,可以构建出高效、可维护的企业级...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    总结来说,Struts1、Struts2和Spring MVC各有优劣,选择哪个框架主要取决于项目需求、团队熟悉程度以及对框架特性的偏好。在现代Java Web开发中,Spring MVC因其灵活性和强大的功能,成为更受欢迎的选择。

    struts2 spring hibernate集成

    集成Struts2、Spring和Hibernate时,需要注意配置文件的正确设置,包括Action配置、Spring Bean的定义、Hibernate的数据库连接和实体映射。同时,理解这三个框架的工作原理和相互作用,对于解决问题和优化代码至关...

    struts2和spring结合插件原理

    struts2-spring-plugin.jar :struts,spring插件。...在我们集成struts2+spring+hibernate,也就是所谓的S2SH,不可避免的要引入struts2-spring-plugin.jar插件。 本文介绍了该插件的使用方式,工作原理,和常见问题

    struts spring集成原理

    **Struts与Spring的集成原理** 集成Struts和Spring主要有以下几个步骤: 1. **引入Spring插件**:在Struts 2中,需要添加Spring插件,如`struts2-spring-plugin-*.jar`到项目类路径中。 2. **配置Spring**:在...

    Struts2与Spring2框架整合实例

    Struts2和Spring2是Java Web开发中两个非常重要的开源框架。Struts2是一个用于构建MVC(模型-视图-控制器)架构的框架,它提供了丰富的动作和拦截器库,便于实现业务逻辑和控制层的解耦。而Spring2则是一个全面的...

    struts2+spring+mybatis框架

    Struts2、Spring和MyBatis是Java Web开发中经典的三大框架,它们组合起来可以构建出高效、可维护的Web应用程序。以下是对这三个框架及其整合的详细解释。 **Struts2框架** Struts2是一个基于MVC(Model-View-...

    struts2+spring实例程序

    Struts2和Spring是两种非常重要的Java Web开发框架,它们在企业级应用中广泛使用。Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的轻量级框架,提供了包括依赖注入、...

    struts2整合spring实现拦截器

    整合Struts2和Spring的主要目的是将Spring的依赖注入特性引入到Struts2的Action中,这样可以避免硬编码依赖,使代码更加灵活和易于测试。这通常通过使用Spring的Struts2插件来实现,该插件允许Struts2从Spring容器中...

    struts2+spring+hibernate+dwr

    Struts2与Spring的集成使得我们可以利用Spring的依赖注入(DI)和面向切面编程(AOP)特性,简化对象管理。 Spring框架是Java企业级应用的核心,它提供了一站式解决方案,包括IOC(Inversion of Control,控制反转...

    struts2+spring+hibernate+mysql(eclipse)整合增删改查

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合通常被称为SSH整合,是构建企业级应用的一种常用技术栈。本项目是基于Eclipse集成开发环境,结合MySQL数据库实现的一个基础的增删改查功能。接...

    struts2+spring集成bug——使用AOP时可能遇到的问题分析

    首先,让我们深入理解Struts2和Spring的集成原理。在集成过程中,通常会通过Spring的`struts-plugin.xml`配置文件来管理Struts2的动作类(Action),这样Spring就能负责这些动作类的生命周期管理,包括依赖注入。...

    Struts1+Spring2+Hibernate2整合详细例子

    Struts1、Spring2和Hibernate2是Java Web开发中的三个重要框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个整合例子旨在展示如何将这三个框架协同工作,以构建一个完整的Java Web应用程序。 Struts1是...

    整合struts2和spring源代码(可以直接在tomcat中运行)

    1.将struts2和spring中的库文件复制到项目下(可以查看WEB-INF\lib目录下的文件) 注意:struts2-spring-plugin-2.3.8.jar和commons-logging.jar文件可以在 struts框架中的找到而spring.jar 在spring框架中 2. ...

    Struts2,Spring,Hibernate jar包下载

    Struts2、Spring和Hibernate是Java开发中三大主流的开源框架,它们分别专注于Web层、业务层和服务层的管理,组合使用可以构建出强大的企业级应用。这些框架的jar包是开发人员日常工作中必不可少的工具。 **Struts2*...

    struts1,struts2,spring,hibernate

    Struts1、Struts2、Spring和Hibernate是Java Web开发中的四大框架,它们各自承担着不同的职责,共同构建了一个强大的企业级应用体系。 Struts1是Apache组织开发的一个开源MVC框架,它使得Java Web应用程序的开发...

    quartz.*整合struts2、spring一个的demo

    在这个demo中,只提供了Quartz必要的库,所以其他如Struts2和Spring的相关库需要你自己添加到项目中。 具体步骤可能如下: 1. 创建Spring配置文件,配置Quartz的相关bean,如SchedulerFactoryBean和JobDetail。 2. ...

    JavaWeb-Hibernate-Struts2-Spring2

    JavaWeb开发是一个复杂...这些资源对于深入理解和实践JavaWeb开发,特别是Hibernate、Struts2和Spring2的集成应用,非常有价值。通过学习这些教程和理解相关概念,开发者可以更高效地构建稳定且功能丰富的Web应用程序。

    struts2+spring+ibatis增删改查

    Struts2、Spring和...综上所述,这个案例涵盖了Struts2+Spring+iBatis框架的典型应用场景,通过学习和实践这个案例,开发者可以深入理解这三大框架的协同工作原理,为开发高效、稳定的Java Web应用打下坚实的基础。

    struts2 hibernate spring 项目

    Spring与Struts2和Hibernate的整合可以实现无缝的MVC应用,提供更健壮的架构。 在这个SSH-test项目中,开发者可能已经配置好了三个框架的整合,确保它们能够协同工作。Struts2负责接收用户请求并调用业务逻辑,业务...

Global site tag (gtag.js) - Google Analytics