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 中把该项目配置拿掉。
同时也多请留意下里面配置的其他几个属性,肯定蕴藏着不少学问的。
相关推荐
这样,当Struts2框架处理请求时,它会查找并使用Spring容器中的Action实例。 例如,一个简单的配置可能是这样的: ```xml <struts> <constant name="struts.objectFactory" value="spring"/> <constant name="...
标题中的"Struts2.0-Spring所需的Jar包"指的是在SSH集成开发环境中,为了使Struts2和Spring能够协同工作,你需要将特定版本的Struts2和Spring的JAR文件添加到项目的类路径中。这些JAR文件包含了运行这两个框架所需的...
- **其他Struts2相关jar包**:如struts2-dojo-plugin.jar(提供dojo库支持)、struts2-plugins.jar(包含多种插件)等,根据项目需求选择性引入。 2. **Spring框架**: - **spring-beans.jar**:Spring的核心模块...
5. `struts2-convention-plugin.jar`和`struts2-spring-plugin.jar`:分别是约定优于配置插件和Spring集成插件,前者简化了Action配置,后者则帮助将Struts2与Spring容器整合。 6. `struts2-dojo-plugin.jar`和`...
2. `struts2-plugins`目录:各种插件,如Freemarker、Tiles、JSON等。 3. `struts2-dojo-plugin`:提供与Dojo库的集成,用于创建富客户端界面。 4. `struts2-spring-plugin`:与Spring框架的集成库。 5. `struts2-...
5. **Struts2-spring-plugin**: 与Spring框架的集成,支持依赖注入,方便管理Action类及其依赖。 6. **Struts2-json-plugin**: 提供JSON支持,使得Struts2可以处理AJAX请求和返回JSON格式的数据。 7. **Struts2-...
7. `struts2-spring-plugin-2.3.30.jar`:与Spring框架的集成插件。 8. `struts2-tiles-plugin-2.3.30.jar`:与Tiles框架的集成插件,用于布局管理。 9. `struts2-plugins`目录:包含其他各种插件,如REST、...
- `struts2-spring-plugin.jar`:如上所述,这个插件允许Struts2与Spring容器集成,使得Action和其它对象可以通过Spring的依赖注入(DI)进行管理。 4. **Action and Results** - `struts2-action.jar`: 包含了...
1. **Action和Result**: Struts2的动作(Action)是业务逻辑的执行单元,而结果(Result)则定义了动作执行后的跳转页面或处理方式。Action类可以自定义,以实现特定的业务逻辑,而Result则通过配置文件来指定如何...
struts2-spring-plugin.jar则与Spring框架无缝集成,支持依赖注入,便于管理Bean。还有其他如struts2-plugins目录下的各种插件,分别针对不同的需求,如文件上传、国际化、异常处理等提供便利。 在使用Struts 2.3....
- **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.zip"后,你会得到以下主要组成部分: 1. **struts2-core**:核心库,包含Struts2框架的主要实现。 2. **struts2-plugins**:一系列插件,用于扩展Struts2的功能...
Struts2、Spring和MyBatis是Java Web开发中的三个重要框架,它们分别负责MVC模式中的动作控制、依赖注入和服务层数据操作。本部分将详细介绍这三个框架在2.3.15.3、3.2.4和3.2.3版本中的分页查询功能。 Struts2作为...
开发者需要创建Action类并实现相应的业务逻辑方法,Struts 2会自动调用这些方法。 2. **配置文件**:主要包括`struts.xml`,这是Struts 2的主配置文件,用于定义Action、结果类型、拦截器等。通过配置文件,开发者...
2. **Struts2 Plugins**: Struts2支持多种插件来扩展其功能,例如Struts2-convention-plugin(基于约定的配置)、Struts2-dojo-plugin(提供Dojo JavaScript库的支持)、Struts2-json-plugin(支持JSON数据格式)。...
### Struts2、Spring与Hibernate整合的关键点及注意事项 #### 一、概述 在Java Web开发领域,Struts2、Spring以及Hibernate是三个非常重要的框架。它们分别在MVC架构、依赖注入与业务逻辑管理、对象关系映射等方面...
9. **struts2-spring-plugin**: 与Spring框架的整合插件,允许Struts2的Action和其它组件注入Spring管理的bean,实现依赖注入和事务管理。 10. **struts2-plugins**: 除了上述特定功能的插件外,Struts2还包含一...
4. **Interceptor(拦截器)**:拦截器是Struts2的一个强大特性,它们在Action调用前后执行,可以用来实现事务管理、日志记录、数据验证等通用功能。 5. **配置文件**:Struts2的配置文件(通常是struts.xml)用于...
8. **struts2-spring-plugin.jar**:Spring插件允许Struts2与Spring框架集成,便于管理依赖注入和事务控制。 9. **struts2-tiles-plugin.jar**:Tiles插件是基于Apache Tiles的一个视图组件,用于创建复杂的页面...
2. **Struts 2 Plugins**:例如Struts2-dojo-plugin、Struts2-json-plugin等,为应用提供额外的功能,如AJAX支持、JSON序列化等。 3. **第三方库**:如Apache Commons、OGNL(Object-Graph Navigation Language)、...