问题背景:登录功能的实现是这样的:登录请求(POST)+跳转到另一个请求下载相应的页面(302),当并发请求的时候登录就出现失败。
解决方法:
<beanname="verchicleAction" class="com.gtadata.vms.action.manager.VehicleAction"scope="Singleton">,默认设置为Singleton则不支持并发
改为<beanname="verchicleAction" class="com.gtadata.vms.action.manager.VehicleAction"scope="prototype">,则支持并发。
问题原因:
当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。
prototype 作用域部署的bean,每一次请求(将其注入到另一个bean 中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例, 相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean 的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不 闻不问了。
详细见:http://blog.csdn.net/chenjian198819/article/details/6663185
备注:与同事在项目实践过程中汇总