1) Struts2 会对每一个请求,产生一个Action的实例来处理.
2) Spring的Ioc容器管理的bean默认是单实例的.
当Struts2与Spring整合后,由spring来管理Struts2的Action,会遇到什么问题 ?如何解决 ?
----------------------------------------------------------------
会遇到什么问题?
Struts2与Spring整合后, 由spring来管理Struts2的Action, bean默认是单实例有情况下,会有如下问题:
1) Action是单例,其中的FieldError,actionerror中的错误信息 会累加, 即使再次输入了正确的信息,也过不了验证.
2) Struts2的Action是有状态的,他有自己的成员属性, 所以在多线程下,会有问题.
----------------------------------------------------------------
如何解决?
方案一: 就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例.
方案二: spring中bean的作用域设为session ,每个session对应一个实例,解决了多线程问题.(如何设置作用域请看: 4 spring中bean的作用域 )
再写一个拦截器, 清空 FieldError与actionerror
Java代码
1.源自网络
2.
3.public class ClearFieldErrorInterceptor extends AbstractInterceptor {
4.
5.@Override
6.public String intercept(ActionInvocation invocation) throws Exception {
7.ActionSupport actionSupport = (ActionSupport)invocation.getAction();
8.actionSupport.clearErrorsAndMessages();
9.String resultCode = invocation.invoke();
10.return resultCode;
11.}
源自网络
public class ClearFieldErrorInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionSupport actionSupport = (ActionSupport)invocation.getAction();
actionSupport.clearErrorsAndMessages();
String resultCode = invocation.invoke();
return resultCode;
}
-------------------------------------------------------------------------------------
总结 :
方案一 , bean的作用域设为prototype, 担心性能不好, 但没实际测试过,不好说话,也只是担心而已.
方案二: 由于对方案一有担心, 所有才有了方案二, 不知比方案一性能 能高多少
有时间 ,再测试 一下.
分享到:
相关推荐
在本实例中,Spring作为容器管理iBATIS和Struts2的bean,负责各组件间的协调和事务管理。Spring还提供了一个强大的数据访问抽象层,可以与iBATIS无缝集成,简化了数据库操作。 3. **Struts2**:Struts2是一个基于...
- 使用Spring的`<bean>`元素来创建Struts Action的实例,同时可以利用Spring的依赖注入特性来管理Action与其他组件之间的依赖关系。 2. **简化开发流程**: - 通过Spring管理Struts中的Action,可以减少大量的...
综上所述,这个实例项目展示了如何在Java Web环境中集成Spring、Struts2和MyBatis框架,通过Struts2的拦截器实现特定业务逻辑,利用Log4j进行日志记录,以及Spring如何管理整个应用程序的生命周期和数据访问。...
Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。
**JPA+Spring+Struts整合实例** 整合JPA、Spring和Struts的主要目标是实现数据访问层(DAO)、业务逻辑层(Service)和表示层(View)的有效协同工作。 **1. 配置环境** 首先,确保你的项目中包含了这三个框架的...
在本项目"spring_struts2_mybatis_注解的小实例"中,我们将深入探讨如何使用SSM(Spring、Struts2、MyBatis)框架来实现一个基础的增删改查(CRUD)功能。SSM是Java Web开发中常用的三大组件,它们各自负责不同的...
同时,为了集成 Spring,需要配置 Struts2-Spring 插件,这样 Struts2 就能利用 Spring 管理的 Bean。 4. **Action 类**:Action 类通常作为 Struts2 处理请求的入口,它可以从 Spring 容器中注入所需的依赖。通过...
Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...
- **Spring插件**:Struts2提供了一个Spring插件,使得Spring管理的Bean可以直接作为Struts2的Action。 - **Action配置**:在struts.xml中声明Spring管理的Action,不再需要在Action类上添加任何Struts注解。 - *...
学习这个实例,你可以了解如何将前端请求与后端服务连接,理解 Spring 如何通过 DI 管理对象,以及 Struts 2.0 如何组织和执行业务逻辑。这对于初学者来说是一个很好的实践平台,能帮助你快速掌握 Java Web 开发的...
在"简单的spring+struts+hibernate实例"中,我们可以看到一个基础的用户管理功能,包括用户的创建、删除、修改和查询。这个例子主要围绕以下几个核心知识点展开: 1. **Spring框架**: - **依赖注入(DI)**:...
在"Struts2_Spring_Hibernate整合开发实例"中,我们将深入探讨如何将这三个框架集成到一个项目中,实现无缝协作。这个实例提供了详细的步骤和代码示例,帮助开发者快速理解和掌握整合过程。 首先,Struts2的集成...
引入Struts2的Spring插件,该插件使得Spring管理的Action类可以在Struts2中直接使用。在struts.xml配置文件中启用该插件。 4. **Action类的配置** 创建Spring管理的Action类,通常需要实现`...
在本实例中,Maven扮演着核心角色,通过其配置管理Spring、Struts2、iBatis以及Velocity的依赖,使得项目的构建过程更加规范和高效。开发者可以通过编写pom.xml文件来声明项目依赖,Maven会自动下载并管理这些依赖库...
4. **整合步骤**:配置Struts2的Spring插件,使Struts2能够从Spring容器中获取Action实例。在Action类中注入Service,Service再注入DAO,形成完整的依赖链。 5. **测试**:编写JUnit测试用例,验证Spring、Struts2...
同时,我们需要在Struts2的配置文件中指定Spring的Action代理(Spring-Action-Proxy),这样,Struts2的Action实例将由Spring管理。 在图书管理系统中,我们可以定义一个Spring Bean来代表图书实体类,包含了如书名...
struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例
在本实例中,Spring可能被用来管理Bean的生命周期,处理服务层的事务,并通过AOP实现如日志记录、安全控制等跨切面关注点。Spring还提供了与Struts和Hibernate的整合支持,使得三者能够无缝协作。 Struts是基于MVC...
Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的轻量级框架,提供了包括依赖注入、事务管理、AOP(面向切面编程)在内的多种功能。 首先,让我们深入了解Struts2。...