`

引入了 struts2-spring-plugins 包后 Spring 就会管理你的 Action

 
阅读更多

Struts2 与 Spring 结合,使用 Spring 来管理 Action 实例,在项目中引入了struts2-spring-plugin-2.2.1.jar 包。然后想到的是既然是要用 Spring 来管理 Action 实例,就得在 struts.xml 里加上:

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

或者是在 struts.properties 里加上一条属性:

1
struts.objectFactory = spring

OK,这也没问题,然而有次在某个测试项目中想暂时不用 Spring 来管理 Bean,于是把上面的配置去了,也把 web.xml 中的相关 Spring 的 ContextLoaderListener 也格啦。容器启动的时候却发现:

INFO: Initializing Struts-Spring integration...
Jan 20, 2011 7:32:08 PM org.apache.struts2.spring.StrutsSpringObjectFactory <init>
SEVERE: ********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION **********
Looks like the Spring listener was not configured for your web app!
Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext.
You might need to add the following to web.xml:
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
Jan 20, 2011 7:32:08 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter action2
java.lang.NullPointerException
 at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:189)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyResultType(XmlConfigurationProvider.java:479)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addResultTypes(XmlConfigurationProvider.java:450)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:407)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:239)
 at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
 at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:152)
 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
 at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
 at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
 at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)

难道 Struts2 默认就是用 Spring 来管理 Bean 吗?也不对啊,Struts2 并不依赖 Spring 啊。原来是在 struts2-spring-plugin-2.2.1.jar 中的 struts-plugin.xml 中是这样的配置:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<struts>
    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
     
    <!--  Make the Spring object factory the automatic default -->
    <constant name="struts.objectFactory" value="spring" />
 
    <constant name="struts.class.reloading.watchList" value="" />
    <constant name="struts.class.reloading.acceptClasses" value="" />
    <constant name="struts.class.reloading.reloadConfig" value="false" />
 
    <package name="spring-default">
        <interceptors>
            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
            <interceptor name="sessionAutowiring" class="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
        </interceptors>
    </package>   
</struts>

看到里面的 <constant name="struts.objectFactory" value="spring" />,只要引入了 struts2-spring-plugin 插件包就启作用了,原来我们自己在 struts.xml 或是 struts.properties 中的设置的该属性完全是多此一举,要知道 spring 这个 objectfactory 也是在这里边声明的啊。只要引入了 struts2-spring 插件包即可,最好还是从 strtus.xml 或 struts.properties 中把该项目配置拿掉。

 

同时也多请留意下里面配置的其他几个属性,肯定蕴藏着不少学问的。

分享到:
评论

相关推荐

    SSH\\others\\struts2-spring-plugin-2.2.1.jar

    这样,当Struts2框架处理请求时,它会查找并使用Spring容器中的Action实例。 例如,一个简单的配置可能是这样的: ```xml &lt;struts&gt; &lt;constant name="struts.objectFactory" value="spring"/&gt; &lt;constant name="...

    Struts2.0-Spring所需的Jar包

    标题中的"Struts2.0-Spring所需的Jar包"指的是在SSH集成开发环境中,为了使Struts2和Spring能够协同工作,你需要将特定版本的Struts2和Spring的JAR文件添加到项目的类路径中。这些JAR文件包含了运行这两个框架所需的...

    Struts2+Spring整合所需jar包

    - **其他Struts2相关jar包**:如struts2-dojo-plugin.jar(提供dojo库支持)、struts2-plugins.jar(包含多种插件)等,根据项目需求选择性引入。 2. **Spring框架**: - **spring-beans.jar**:Spring的核心模块...

    struts2所有jar包程序文件

    5. `struts2-convention-plugin.jar`和`struts2-spring-plugin.jar`:分别是约定优于配置插件和Spring集成插件,前者简化了Action配置,后者则帮助将Struts2与Spring容器整合。 6. `struts2-dojo-plugin.jar`和`...

    struts-2.3.16-all

    2. `struts2-plugins`目录:各种插件,如Freemarker、Tiles、JSON等。 3. `struts2-dojo-plugin`:提供与Dojo库的集成,用于创建富客户端界面。 4. `struts2-spring-plugin`:与Spring框架的集成库。 5. `struts2-...

    struts2.2.3需要11个基本包

    5. **Struts2-spring-plugin**: 与Spring框架的集成,支持依赖注入,方便管理Action类及其依赖。 6. **Struts2-json-plugin**: 提供JSON支持,使得Struts2可以处理AJAX请求和返回JSON格式的数据。 7. **Struts2-...

    struts-2.3.30-all

    7. `struts2-spring-plugin-2.3.30.jar`:与Spring框架的集成插件。 8. `struts2-tiles-plugin-2.3.30.jar`:与Tiles框架的集成插件,用于布局管理。 9. `struts2-plugins`目录:包含其他各种插件,如REST、...

    struts2必要jar包

    - `struts2-spring-plugin.jar`:如上所述,这个插件允许Struts2与Spring容器集成,使得Action和其它对象可以通过Spring的依赖注入(DI)进行管理。 4. **Action and Results** - `struts2-action.jar`: 包含了...

    struts-2.3.8-all.zip

    1. **Action和Result**: Struts2的动作(Action)是业务逻辑的执行单元,而结果(Result)则定义了动作执行后的跳转页面或处理方式。Action类可以自定义,以实现特定的业务逻辑,而Result则通过配置文件来指定如何...

    最新版struts-2.3.16.3所有的开发jar架包

    struts2-spring-plugin.jar则与Spring框架无缝集成,支持依赖注入,便于管理Bean。还有其他如struts2-plugins目录下的各种插件,分别针对不同的需求,如文件上传、国际化、异常处理等提供便利。 在使用Struts 2.3....

    struts2 各种架包

    - **Struts2-spring-plugin**:与Spring框架集成,实现依赖注入和管理Action对象。 6. **JAR包** - `struts2-core.jar`:核心库,包含框架的基础组件。 - `struts2-plugins/*.jar`:各种插件的JAR文件,例如...

    struts-2.5.20-all.rar

    在解压"struts-2.5.20-all.rar"或"struts-2.5.20-all.zip"后,你会得到以下主要组成部分: 1. **struts2-core**:核心库,包含Struts2框架的主要实现。 2. **struts2-plugins**:一系列插件,用于扩展Struts2的功能...

    (三)struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 分页 查询

    Struts2、Spring和MyBatis是Java Web开发中的三个重要框架,它们分别负责MVC模式中的动作控制、依赖注入和服务层数据操作。本部分将详细介绍这三个框架在2.3.15.3、3.2.4和3.2.3版本中的分页查询功能。 Struts2作为...

    struts-2.5.2-all.zip

    开发者需要创建Action类并实现相应的业务逻辑方法,Struts 2会自动调用这些方法。 2. **配置文件**:主要包括`struts.xml`,这是Struts 2的主配置文件,用于定义Action、结果类型、拦截器等。通过配置文件,开发者...

    struts2 lib包

    2. **Struts2 Plugins**: Struts2支持多种插件来扩展其功能,例如Struts2-convention-plugin(基于约定的配置)、Struts2-dojo-plugin(提供Dojo JavaScript库的支持)、Struts2-json-plugin(支持JSON数据格式)。...

    struts2 spring hibernate整合要点、注意点

    ### Struts2、Spring与Hibernate整合的关键点及注意事项 #### 一、概述 在Java Web开发领域,Struts2、Spring以及Hibernate是三个非常重要的框架。它们分别在MVC架构、依赖注入与业务逻辑管理、对象关系映射等方面...

    struts2常用的类包

    9. **struts2-spring-plugin**: 与Spring框架的整合插件,允许Struts2的Action和其它组件注入Spring管理的bean,实现依赖注入和事务管理。 10. **struts2-plugins**: 除了上述特定功能的插件外,Struts2还包含一...

    struts-2.5.12-all.zip

    4. **Interceptor(拦截器)**:拦截器是Struts2的一个强大特性,它们在Action调用前后执行,可以用来实现事务管理、日志记录、数据验证等通用功能。 5. **配置文件**:Struts2的配置文件(通常是struts.xml)用于...

    struts2必备11个jar包

    8. **struts2-spring-plugin.jar**:Spring插件允许Struts2与Spring框架集成,便于管理依赖注入和事务控制。 9. **struts2-tiles-plugin.jar**:Tiles插件是基于Apache Tiles的一个视图组件,用于创建复杂的页面...

    struts-2.3.28.1 jar包

    2. **Struts 2 Plugins**:例如Struts2-dojo-plugin、Struts2-json-plugin等,为应用提供额外的功能,如AJAX支持、JSON序列化等。 3. **第三方库**:如Apache Commons、OGNL(Object-Graph Navigation Language)、...

Global site tag (gtag.js) - Google Analytics