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

struts2使用spring实现IOC时的配置和要注意到问题

阅读更多
在struts2中,通过spring来实现其IOC有很多的文章都有介绍,本文将总结一下其配置过程。此外,对几个很多文章都没涉及到容易出错的地方,在这里也一并总结一下,希望能给大家在配置的过程中提供帮助,少走弯路。
要想让struts2实现IOC的功能需要做如下几步工作:
(1)、web.xml中添加如下配置:
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

(2)、需要修改struts.properties配置文件:
struts.objectFactory = org.apache.struts2.spring.StrutsSpringObjectFactory

注意,很多网上的文章写的是:
struts.objectFactory = spring

我个人配置的经验是,这样配置可能会报错,原因我也不知道……。
(3)、引入spring.jar和struts2-spring-plugin-2.0.11.1.jar两个jar包。
(4)、将struts的*Action.java以bean的形式写在spring的配置文件中,如下代码所示:
<bean id="userAction" class="com.demo.web.user.UserAction" />

(5)、将spring的配置文件加入web.xml中,形如:
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring/applicationContext*.xml
		</param-value>
	</context-param>

(6)、修改strtus.xml配置文件:
将原来的
……
		<action name="user" class="com.demo.web.user.UserAction">
			<result name="reload" type="redirect-action">user</result>
		</action>
……

改为:
……
		<action name="user" class="userAction">
			<result name="reload" type="redirect-action">user</result>
		</action>
……


完成这个过程后,基本上算大功告成。
但是,在实际的配置过程中,需要注意如下问题
1、关于调用struts的action时出现如下错误:
No thread-bound request found: Are you referring to request attributes outside of an actual web request? If you are actually operating within a web request and still receive this message,your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
必然,这个错误是由于IOC引起的,如果不用IOC的方式,这个错误就不会出现。一种出现该错误的情况在于你的Action配置了session,request或则response。大家都知道在struts2中,request和response的实现机制已经大不一样了,不以参数的形式存在于方式之中,而是通过实现SessionAware, ServletRequestAware,ServletResponseAware接口的set方法实现的。
不管怎么样,解决办法是有的,其实该错误本身就说了解决办法(use RequestContextListener or RequestContextFilter to expose the current request):
在web.xml中添加:
	<listener>
		<listener-class>
			org.springframework.web.context.request.RequestContextListener
		</listener-class>
	</listener>

重新启动,你会发现,现在错误没有了。
2、关于struts.properties的两个参数设置:
#该参数设置spring管理的struts bean的装配模式
#有如下参数可供选择
#name 按照你的action的属性的名字和Spring里的bean的名字匹配,如果匹配就自动装配。这是缺省的 
#type 按照你的action的属性的类型,在Spring注册的bean中查找,如果相同就自动装配。这需要你在Spring中仅注册了一个此类型的bean 
#auto Spring会试图自动监测来找到最好的方法自动装配你的action 
#constructor Spring会自动装配bean的构造函数的参数 

struts.objectFactory.spring.autoWire = type
#是否使用类缓存。你可以通过设置修改struts.properties中下列属性的值来改变是否使用Spring自身的类缓存机制。可以设定的值为true或false,默认为true
struts.objectFactory.spring.useClassCache = false
分享到:
评论
3 楼 joeyhuang 2011-07-07  
恩,学习了;还没自己配置过,呵呵
2 楼 yoin528 2010-12-23  
谢谢,我就是配置request时老是出来异常,用singleton又老是存在缓存问题,现在好了,改了org.springframework.web.context.request.RequestContextListener
就没事了,谢谢~
1 楼 bcw104 2008-11-13  
大哥,我的老是出这种错误是怎么回事?
信息: The listener "org.springframework.web.context.ContextLoaderListener" is already configured for this context. The duplicate definition has been ignored.
2008-11-13 11:31:42 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

相关推荐

    struts2+spring+mybatis框架

    4. **整合Spring和Struts2**:使用Spring的Struts2插件,使Spring管理的Bean可以直接在Struts2 Action中注入使用。 5. **整合Spring和MyBatis**:通过Spring的SqlSessionFactoryBean,将MyBatis的SqlSessionTemplate...

    struts1+spring2.5.6+jdbc配置

    在Struts1+Spring的集成中,Spring可以作为IoC容器,管理Struts1中的Action和Service对象,实现依赖的注入,使得代码更加灵活和可测试。此外,Spring的AOP功能可以方便地实现全局事务管理和日志记录。 JDBC是Java...

    大型项目的struts,spring配置文件

    Struts和Spring是Java开发中两个非常重要的框架,它们在构建大型企业级应用程序时起着核心作用。Struts是MVC(模型-视图-控制器)架构的一个实现,主要用于处理前端请求,而Spring则是一个全面的后端框架,提供依赖...

    Struts2.3.1与Spring3.1整合时需要的jar包

    在实际开发中,还需要注意版本兼容性,因为不同的Struts2和Spring版本之间可能存在不兼容的问题,选择稳定且兼容的版本组合至关重要。同时,遵循最佳实践和社区推荐的配置方式,可以避免常见问题,提高开发效率。

    Struts2与Spring之间的整合方法与原理

    综上所述,Struts2与Spring的整合主要是通过配置让Struts2使用Spring的IoC容器来管理Action对象,从而实现依赖注入、对象生命周期管理等功能,提高代码的可维护性和灵活性。这一整合过程涉及多个配置文件的修改和...

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用

    在整合过程中,开发者需要注意配置文件的正确设置,包括Struts2的struts.xml、Hibernate的hibernate.cfg.xml以及Spring的applicationContext.xml等。还需要确保各框架之间的依赖注入正确无误,例如,Spring需要知道...

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

    7. **编写DAO接口和实现类**:定义数据访问接口,使用Spring的@Autowired注解注入SessionFactory,实现具体的数据操作。 8. **编写Service接口和实现类**:定义业务逻辑接口,使用Spring的@Service注解进行标记,...

    ssh中struts2,spring,各配置说明

    下面分别介绍SSH中的Struts2.xml、Spring.xml和web.xml配置。 **Struts2.xml配置** Struts2是基于Action的MVC框架,其配置文件Struts2.xml主要负责定义Action、Action类与结果页面的映射关系。例如: ```xml ...

    struts2_mybatis_spring_框架实例整合_数据库 文档

    在Struts2和MyBatis的整合中,Spring可以协调这两个框架,管理Struts2的Action和MyBatis的Mapper接口,实现依赖注入和事务控制。 整合这三大框架的过程主要包括以下几个步骤: 1. 配置Spring:创建Spring的配置...

    struts2+spring+ibatis增删改查

    4. **整合过程**:在整合Struts2、Spring和iBatis时,首先需要在项目中引入对应的jar包,然后配置web.xml(Struts2的前端控制器DispatcherServlet)和struts.xml(定义Action和结果)。接着,配置Spring的...

    struts2+spring

    6. **测试与运行**:确保所有的配置都正确无误后,运行项目,通过发送HTTP请求到Struts2 Action,验证Struts2和Spring是否成功整合。 整合Struts2和Spring有以下好处: - **解耦合**:Spring的依赖注入可以降低...

    struts2,spring,hibernate整合的所有jar包。

    - Struts2使用拦截器(Interceptor)机制处理请求,如验证、日志等,这些拦截器可以通过配置文件进行组合和定制。 2. **Spring框架**: - Spring以IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented ...

    struts2 hibernate spring 整合实例

    这样,当Struts2接收到请求时,会通过Spring的IoC容器获取到相应的Action实例。 在数据库层面,需要创建Hibernate的映射文件(.hbm.xml),定义实体类和表之间的映射关系,并在Spring配置文件中声明SessionFactory ...

    spring+struts2+mybatis整合

    以上就是关于“spring+struts2+mybatis整合”的核心知识点,整合过程中需要注意各个组件的配置和协调,以及在实际项目中根据具体需求进行优化。在实际操作中,你可以参考相关教程或示例项目,一步步完成整合。

    struts2+spring+hibernate整合步骤

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在模型-视图-控制器(MVC)架构中承担不同的角色。Struts2负责处理用户请求并控制应用程序流程,Spring提供依赖注入和面向切面编程,而Hibernate则...

    Struts1+Spring+iBatis-jar包

    然而,需要注意的是,虽然这三者可以良好集成,但在现代Web开发中,Struts1已被Struts2或其他更先进的框架替代,Spring Boot等一站式解决方案也逐渐成为主流,因为它们提供了更简洁的配置和更强大的功能。...

    Struts Spring Hibernate整合实践

    - 将 Struts 的 Action 映射配置改为使用 Spring 管理的 Bean,通常会配置一个 `&lt;action&gt;` 节点,指定对应的 Spring Bean 名称。 - 创建 Spring 的配置文件,定义需要托管的 Bean,包括Action、Service、DAO等,...

    Struts2+Spring2+Hibernate3整合方案

    5. 整合Struts2与Spring:使用Spring插件Struts2-Spring-plugin,配置struts-plugin.xml,使Struts2能识别Spring管理的Bean。 6. 整合Spring与Hibernate:在Spring配置文件中配置SessionFactory,使用...

    SSH整合 struts+hibernate+spring

    - **Spring配置文件**:在Spring配置文件中定义Bean及其依赖关系,当需要更换实现类时,只需修改配置文件即可,无需修改代码。 - **IoC整合的注意事项**: - 使用接口而非实现类进行依赖。 - 推荐使用Spring...

    struts2+spring+Mybatis整合

    在与Struts2整合时,Spring会管理所有bean,包括Struts2的动作类和业务服务。同时,Spring的事务管理可以确保数据操作的一致性。 MyBatis作为持久层框架,消除了JDBC的繁琐工作,允许开发者直接编写SQL语句并与Java...

Global site tag (gtag.js) - Google Analytics