SSH之小问题解惑

(注:以下版本指的是spring3+hibernate3+struts2)

1,web开发中,servlet对象是否线程安全?

  当一个http请求到来时,web容器的调度线程(Dispach Thread)会从已经初始化的线程池中分配一个工作线程(Worker Thread)来负责处理该请求,该工作线程会调用对应的servlet对象的service方法;如果又一个请求到来,web容器会从线程池中选择另一个线程来服务新的请求。web容器不关心请求的是否是同一个servlet实例。所以,多个请求可能调用同一个Servlet对象,servlet的service方法会在多线程环境中并发执行,若servlet中有内部实例变量,则会产生线程安全问题。

2,为什么声明struts的action时,除了@Controller还要@Scope("prototype")?

  为了线程安全。spring管理的bean在不指定scope情况下,默认为single,也就是单例,众所周知,web服务器中servlet就是以单实例多线程的方式运行,这样会有线程安全隐患;若指定为prototype,每次请求到来,spring都会创建一个新的action交给struts来使用,避免了线程安全问题。

      可以结合StackOverflow上的一个问题思考下:http://stackoverflow.com/questions/7621920/scopeprototype-bean-scope-not-creating-new-bean

还有这篇文章,理解有状态和无状态:http://peterwei.iteye.com/blog/960532

3,(将持续更新)

posted @ 2013-12-12 15:53  剑志  阅读(219)  评论(0编辑  收藏  举报