最近才知道 spring mvc 以及struts 的action都是单例的,也就是说服务器内存中只有一个action对象来处理错个用户的请求,
那么,如果多个用户同时请求一个服务器,action上也加了同步关键字,如果一个用户占有该对象时间较长,那么是不是其他用户也就无法使用该对象,导致速度缓慢,第二个问题是在actoin里面的变量会混乱,比如分页,怎么样才能使spring的mvc action不单例呢?
[quote]哈哈 我刚才试了一下,我一直以为是每一个回话产生一个实例,没想到是每一次请求产生一个实例,如果是单例模式的话,分页变量该怎么写?才不会导致变量混乱? [/quote]
[color=red]每一次请求产生一个实例[/color] 正解!
分页变量该怎么写?才不会导致变量混乱? 这个月不需要担心! 按你原来的思路走就行了!
只需要注意 初始化 或者 归零!就好了!他有作用域的!
两个action直接的 分页不是同一个对象了 也不需要担心!
首先纠正下你的叫法 spring mvc 没action这个说法! [color=red]controller [/color]标准叫法! 呵呵
如果多个用户同时请求一个服务器,action上也加了同步关键字 确实很可能会很慢的 !
不过一般都不加 sync (同步的)
如果是spring的 MVC annotation用的习惯的话 直接:@Scope(value="")
如果是配置文件的话 也是配置 scope="prototype
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
[code="java"]1000一个人,也就是一千个线程,同时请求服务器的话,服务器上只有一个controller对象,那么他是怎么处理这1000个请求的? [/code]
这个是没问题的! 并发 1000 (一般攻击网站都这么干的)或者更多!只有服务器承受的下来 是可以处理的!
我们网站 并发500 是可以处理的(有测试的)
你要是觉的很不放心:
配置 scope="prototype 每次产生一个实例咯! 这样是很浪费资源的!
spring不推荐这么干的!
单例模式action 参考一下
[url]http://topic.csdn.net/u/20100721/10/cbaa113e-a4a9-42b7-9325-eb30ba4aed03.html[/url]