由Spring管理的Struts2的Action的单实例问题(转)(2009-05-10 10:38:57)标签:杂谈
背景 :
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代码
源自网络
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;
}
源自网络 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 boot 小实例 spring boot in action上的例子,spring boot 小实例 spring boot in action上的例子。
struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...
如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...
spring3 mvc 注解action dao service 实例教程 ,自己收集的。找了很久。。喜欢大家喜欢。
这个实例帮助开发者更容易地创建基于Spring Boot的应用程序,使得Spring开发者能够最快速地掌握Spring Boot的基本用法。这是一个简单的实例,完全可以跑起来的。
spring开发必备,详细介绍了基础到高阶,并有大量实例
一个Struts+spring实例,运用到Action,Form,Dao…… 希望能为大家带来帮助,谢谢
基于注解的spring mvc,dao 层注解:@Repository("userDao"), entity层注解:@Entity,service层注解:@Service("userService"), action层注解:@Controller("userController") @RequestMapping("/user.do")
采用在web.xml中加载spring配置文件的方法降低struts和spring的耦合度,使用自定义的MyDelegatingRequestProcessor类来代替spring的DelegatingRequestProcessor类来解决spring中action的bean的重复配置问题。...
Struts2+Hibernate+Spring整合实例,登陆注册实例,简单来说,Spring通过IoC容器上管(Struts2)Action的创建并依赖注入给控制器,下管(hibernate)SessionFactory的创建并依赖注入给DAO组件,是一个巨大的工厂
整合SSM的详细实例,配置文件各处均有注释,且遵守各种规范(命名,包,等等),日志用log4j,spring中用了注解注入(用的最多的注解),还有对事物的控制、以及扫描Mybatis的配置文件,三层模式(dao+service+action)完全...
源代码 实例代码
Struts2 与Spring 结合,使用Spring 来管理Action 实例
这是我整的一个SSH2整合,适合初学者进行整合学习开发,有注册和整合实例,是在一个Action中,大家可以参考下啊
如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...
Java in Action Struts Spring Hibernate (SSH)
②把action交给spring管理,即在spring配置文件中定义action Bean并使用依赖注入功能在action中注入业务Bean,同时修改作用域。 ③在struts.xml中的class使用第②步中所定义的action Bean 的id属性值。
如果Spring与Hibernate进行了整合,则Hibernate便处于被Spring管理的状态下,Hibernate所需的基础资源,都由Spring以注入的方式提供。 由Spring接管的内容包括: Hibernate创建SessionFactory时需要的DataSource ...
spring in action 第四版 包括中文版本、英文版本、以及实例代码
sp页面的form表单里面有一个属性值action,当提交jsp页面上的form表单时,系统会根据action的值来找到servlet里面...但是这并不是在action里面实例化一个业务逻辑的对象,而是通过spring的配置文件来调用业务逻辑层的类