• 总结: Struts2 + Spring 的线程安全问题


    1. 首先Struts2 本身是安全的

      其原理大概是:Strtus2会获取到用户的http请求,然后负责给每个请求实例化一个Action 对象,但是大家注意,这里的action对象和Struts1里面的action对象完全不是一个概念,struts1里面的action类就是一个servlet类,而这里的action类只是一个普通的java class。这也就是为什么Struts1里面的action是线程不安全的,而struts2里面的action是线程安全的原因。那我们在回头来看看struts2对servlet的处理和struts1有什么不同。看过前面分析的读者肯定知道,struts1的 action对servlet没有进行任何的包装,它是直接实现的Java WEB API 里面的servlet 接口。所以才会有线程安全的问题,但是struts2底层帮我们封装了Servlet,使开发人员不用直接接触Servlet。具体做法是:Strtus2截获servlet请求,然后给每个请求实例化一个Action对象,请求结束之后销毁Action对象。

    2. Spring的单例模式 

    默认情况下Spring是单例的,所以虽然Struts2本身Action设计没有问题,但是如果在SPring中不做好配置的话,一样会导致线程问题,修改配置文件如下:

    经过类似上述的配置,Struts2可以避免大部分的线程安全问题.

  • 相关阅读:
    PHP解决跨域问题
    《高性能MySQL》笔记——MySQL建表数据类型的选择
    PHP中有关IPV4 和IPV6地址转换以及其它一些常见问题
    Axure RP Extension for Chrome安装
    DelayQueue的使用
    MySQL8.0设置远程访问权限
    Git 常用命令
    Zipkin分布式跟踪系统介绍
    什么是kibana?
    Elastic-Job-分布式调度解决方案
  • 原文地址:https://www.cnblogs.com/onmyway20xx/p/3948818.html
Copyright © 2020-2023  润新知