Struts 单例的一点疑惑

ITWIT 2012-08-27 12:26:06
Struts1.X是单例的,那么模拟一个业务场景是:向数据库记录一个登陆用户的信息,需要用到From缓存,多个浏览器同时访问Action的保存用户信息的方法,因为是单例的,所以共用一个Form,会不会造成数据覆盖?如果会覆盖,即使单例有一定的好处,但安全上存在这么大的问题,为什么还要使用这种实现方式或者有其什么对应措施?
...全文
111 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1 这个会话 应该是request 。
2 方法是Thread 独享的,也就意味着线程调用方法时的局部变量(不是全局变量)也是唯一的。
ITWIT 2012-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
Struts1.X是单例的,但是表单的值是通过参数从ActionForm传入的,如下面的form,每个请求的产生的form是不同的,怎么可能相互覆盖呢?execute(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response) 主要是注意在Struts1的ACTION中不要……
[/Quote]
谢谢您的回答,而且答案也表示十分同意,不过有两点我比较模糊,就是:
1、Http向ActionServlet发送一个请求,ActionServlet会根据Action标签中是否配置了form属性,如果有则在当前会话中查看是否已经有该From的实例,如果没有则new一个返回,如果有则直接拿来用。如果该Action的会话范围设置为Session,那这个Form不是同一个吗,这样是不是就有覆盖现象了?
2、在excute方法中定义一个int的局部变量,并在代码中多次用到,并发访问下,这个int的变量不会相互覆盖吗?
阿甘1976 2012-08-27
  • 打赏
  • 举报
回复
Struts1.X是单例的,但是表单的值是通过参数从ActionForm传入的,如下面的form,每个请求的产生的form是不同的,怎么可能相互覆盖呢?execute(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response) 主要是注意在Struts1的ACTION中不要使用成员变量,如果这样此成员变量会被多个线程共享,有线程安全问题。STRUTS2的ACTION已经不再是单例的,所以表单的值是通过ACTION的成员变量来传递的,这是STRUTS1和STRUTS2的主要区别之一。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧