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定义成原型的。

  • 相关阅读:
    webpack
    npm
    关于js click事件、touch事件的 screen 、client
    同源策略、jsonp、阻塞事件
    关于height、width、top
    新建空白图片
    配置环境
    异常02
    异常01
    集合框架08
  • 原文地址:https://www.cnblogs.com/iisme/p/10480251.html
Copyright © 2011-2022 走看看