struts2的acion单独使用的时候应是多例的,也就是原型(prototype)。
因为它是基于类开发的,它的三种获取页面传参的方式都是通过成员变量的方式来接受的。
如果用struts2框架基于方法的形式进行开发(一个方法对应一个请求处理的话),那么意味着这多个方法都可以共享成员变量。这时候,那么就可能会出现并发问题:不同的请求对同一个实例中的成员变量一起操作,出现数据安全问题。比如前一个人的密码可能被后面的人看到,提交的数据被修改等。
这就是为什么struts2为什么是多例的原因。

值得注意的是,当把struts交给spring管理的时候,由于spring管理的bean默认是单例的,随之创建的action实例也是单例的,这时候我们要显式地把它定义成原型(prototype)。

springMVC的action默认是单例的
虽然springmvc是单例的,但是一般它不会出现安全的问题,因为它是基于方法开发的:它通过方法的形参列表来接受用户传过来的前端参数,这些参数属于局部变量,所以每个请求之间的参数互不相通。
上面说的一般不会出现安全问题,那什么是不一般呢?
当你在action中定义了成员属性的时候,那么代表所有的请求都有可能会操作这个属性,这时候就出现了数据安全问题了,所以不推荐使用成员属性。如果你不得不用,那么你可以把action定义成原型的。

Struts2和SpringMVC的action是单例还是原型的?的更多相关文章

  1. Spring5源码解析-Spring框架中的单例和原型bean

    Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...

  2. Struts2 action的单例与多例

    struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象.原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面 ...

  3. SSH中Action的单例与多例

    Structs2中的Bean默认的是单例,在整个程序运行期间,每个Bean只有一个实例,只要程序在运行,这个实例就一直存在. 对于Action来说,单例就容易出问题.如果客户端每次提交的参数都是一样的 ...

  4. SpringMVC学习笔记:单例与并发问题

    Spring中的Bean默认都是单例(singleton),Spring中Bean的scope属性有五种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时 ...

  5. SpringMVC之控制器的单例和多例管理

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在使用Spring3对控制器Controller进行bean管理时,如果要对控制器是否单例进行管理. 有两种方式配置多例模式: 1.springX ...

  6. struts2,servlet和springmvc的单例多例问题

    struts2,servlet和springmvc的单例多例问题 原创 2017年06月12日 09:59:21 标签: struts2 / servlet / springmvc / 单例 / 多例 ...

  7. Struts2 本是非单例的,与Spring集成就默认为单例

    1.Struts2本身action类是多例,此设计的原因在于本身action担任了数据载体,如果做成单例,则会便多用户数据受到影响: 2.当Struts2 与 spring整合时,Struts2的Ac ...

  8. SpringMVC Controller单例和多例

    对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0. ...

  9. struts2的action是多例,servlet是单例

    struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...

随机推荐

  1. Yii项目开发总结

    学习Yii很久了,一直做的是小案例,自以为学的还不错.直到最近用Yii开发了一个非常简单的CMS,一路下来,磕磕绊绊,才知自己不足.加上最近正学习着偏架构方面的知识.特此总结一下.小白经验,大神轻拍, ...

  2. mysql - 简单的触发器和存储过程

    delimiter // drop PROCEDURE proc_member_preprocessor;// )) main:BEGIN SELECT COUNT(uid) INTO @proc_h ...

  3. Windows Live Writer发布CSDN离线博客教程及测试

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  4. GitHub 出现这样的问题怎么办

    一开始以为是被墙,憋个半死. 后来自己好了(大概过了一上午),虚惊一场.

  5. SourceInsight中 加namespace宏后,无法跳转问题解决

    Option->preferences->languages: C++ language->special, checked Ignore namespace declaration ...

  6. http 错误代码

    2xx  成功  200  正常:请求已完成.  201  正常:紧接 POST 命令.  202  正常:已接受用于处理,但处理尚未完成.  203  正常:部分信息 — 返回的信息只是一部分.   ...

  7. Javascirpt 常见的误区

    var foo = new Object(); var bar = new Object(); var map = new Object(); map[foo] = "foo"; ...

  8. modelsim使用常见问题及解决办法集锦 ②

    二.Error deleting “msim_transcript” Error deleting “msim_transcript”:permission denied. Check the Nat ...

  9. PyCharm社区版+Django搭建web开发环境-2

    接上一篇:PyCharm社区版+Django搭建web开发环境-1 1. 创建好django项目并建立app应用:web 2. setting.py:配置app应用 INSTALLED_APPS = ...

  10. Lazy<T> 提供对延迟初始化的支持

    延迟初始化  就是在第一次使用的时候在 进行类的初始化 public class Student { public Student() { this.Name = "DefaultName& ...