servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解1

时间:2024-03-04 20:00:14

servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解

(2013-06-19 19:30:40)
   
servlet的非线程安全,action的线程安全
对提交到同一个servlet类的多个业务请求,共享一个servlet对象(即这个servlet类只被实例化一次)
这就是通常所说的对于同一个业务请求,只会有一个servlet实例被容器产生。线程安全是对多个(线程)用户同时访问同一个对象(实例)的变量,引起线程安全问题,所以,servlet接收和处理,不处理属性
而action处理业务时,产生不同的对象,故事线程安全的

一个请求是可以产生多个servlet的,但由不同的servlet类实例化的,每个servlet类都只被实例化一次,直到应用程序终止或服务器终止。 列如:请求可以从一个servlet forward到另一个servlet


不同的用户同时对同一个业务(如注册)发出请求,只有一个servlet实例。一个servlet是在第一次被访问时加载到内存并实例化的。同样的业务请求共享一个servlet实例。不同的业务请求一般对应不同的servlet. 
如果不同的2个用户同时对这个网站的不同业务同时发出请求(如注册和登陆),容器里有2个servlet(当然,这是在“一个servlet对应一种业务请求”的前提下,如果你要把两个业务逻辑写在同一个servlet内另当别论了)