`
wh_xia_jun
  • 浏览: 16073 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

spring 管理struts2单实例问题

    博客分类:
  • java
阅读更多
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,  担心性能不好, 但没实际测试过,不好说话,也只是担心而已.




方案二:  由于对方案一有担心, 所有才有了方案二, 不知比方案一性能 能高多少




有时间 ,再测试 一下.





分享到:
评论

相关推荐

    ibatis+Spring+struts2整合实例

    在本实例中,Spring作为容器管理iBATIS和Struts2的bean,负责各组件间的协调和事务管理。Spring还提供了一个强大的数据访问抽象层,可以与iBATIS无缝集成,简化了数据库操作。 3. **Struts2**:Struts2是一个基于...

    spring管理struts和hibernate

    - 使用Spring的`<bean>`元素来创建Struts Action的实例,同时可以利用Spring的依赖注入特性来管理Action与其他组件之间的依赖关系。 2. **简化开发流程**: - 通过Spring管理Struts中的Action,可以减少大量的...

    spring+struts2+mybatis实例

    综上所述,这个实例项目展示了如何在Java Web环境中集成Spring、Struts2和MyBatis框架,通过Struts2的拦截器实现特定业务逻辑,利用Log4j进行日志记录,以及Spring如何管理整个应用程序的生命周期和数据访问。...

    Spring与struts整合开发实例

    Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。

    JPA+Spring+Struts整合实例,JPA+Spring+Struts整合实例

    **JPA+Spring+Struts整合实例** 整合JPA、Spring和Struts的主要目标是实现数据访问层(DAO)、业务逻辑层(Service)和表示层(View)的有效协同工作。 **1. 配置环境** 首先,确保你的项目中包含了这三个框架的...

    spring_struts2_mybatis_注解的小实例

    在本项目"spring_struts2_mybatis_注解的小实例"中,我们将深入探讨如何使用SSM(Spring、Struts2、MyBatis)框架来实现一个基础的增删改查(CRUD)功能。SSM是Java Web开发中常用的三大组件,它们各自负责不同的...

    spring与struts2整合

    同时,为了集成 Spring,需要配置 Struts2-Spring 插件,这样 Struts2 就能利用 Spring 管理的 Bean。 4. **Action 类**:Action 类通常作为 Struts2 处理请求的入口,它可以从 Spring 容器中注入所需的依赖。通过...

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

    Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...

    Struts2+Spring演示实例源代码

    - **Spring插件**:Struts2提供了一个Spring插件,使得Spring管理的Bean可以直接作为Struts2的Action。 - **Action配置**:在struts.xml中声明Spring管理的Action,不再需要在Action类上添加任何Struts注解。 - *...

    Spring+Struts2.0实例代码

    学习这个实例,你可以了解如何将前端请求与后端服务连接,理解 Spring 如何通过 DI 管理对象,以及 Struts 2.0 如何组织和执行业务逻辑。这对于初学者来说是一个很好的实践平台,能帮助你快速掌握 Java Web 开发的...

    简单的spring+struts+hibernate实例

    在"简单的spring+struts+hibernate实例"中,我们可以看到一个基础的用户管理功能,包括用户的创建、删除、修改和查询。这个例子主要围绕以下几个核心知识点展开: 1. **Spring框架**: - **依赖注入(DI)**:...

    Struts2_Spring_Hibernate整合开发实例

    在"Struts2_Spring_Hibernate整合开发实例"中,我们将深入探讨如何将这三个框架集成到一个项目中,实现无缝协作。这个实例提供了详细的步骤和代码示例,帮助开发者快速理解和掌握整合过程。 首先,Struts2的集成...

    Spring与Struts2整合

    引入Struts2的Spring插件,该插件使得Spring管理的Action类可以在Struts2中直接使用。在struts.xml配置文件中启用该插件。 4. **Action类的配置** 创建Spring管理的Action类,通常需要实现`...

    maven构建spring struts2 ibatis velocity小实例

    在本实例中,Maven扮演着核心角色,通过其配置管理Spring、Struts2、iBatis以及Velocity的依赖,使得项目的构建过程更加规范和高效。开发者可以通过编写pom.xml文件来声明项目依赖,Maven会自动下载并管理这些依赖库...

    Spring+Struts2+JPA

    4. **整合步骤**:配置Struts2的Spring插件,使Struts2能够从Spring容器中获取Action实例。在Action类中注入Service,Service再注入DAO,形成完整的依赖链。 5. **测试**:编写JUnit测试用例,验证Spring、Struts2...

    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整合实例 struts2、spring、ibatis整合实例

    Spring+Struts+Hibernate 实例源代码

    在本实例中,Spring可能被用来管理Bean的生命周期,处理服务层的事务,并通过AOP实现如日志记录、安全控制等跨切面关注点。Spring还提供了与Struts和Hibernate的整合支持,使得三者能够无缝协作。 Struts是基于MVC...

    struts2+spring实例程序

    Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的轻量级框架,提供了包括依赖注入、事务管理、AOP(面向切面编程)在内的多种功能。 首先,让我们深入了解Struts2。...

Global site tag (gtag.js) - Google Analytics