zoukankan      html  css  js  c++  java
  • Struts2和SpringMVC的action是单例还是原型的?

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

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

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

  • 相关阅读:
    500桶酒中有一桶毒酒
    查看docker run参数(亲测实用)
    ubuntu密码忘记-备份
    python sklearn2pmml
    javafx弹窗显示错误堆栈
    Java实现新开一个进程
    MockServer调试通过,本地通过浏览器可以打开对应web网页
    java 实现Put request
    JAVA发送HttpClient请求及接收请求完整代码实例
    我还是很喜欢你
  • 原文地址:https://www.cnblogs.com/iisme/p/10480251.html
Copyright © 2011-2022 走看看