您的位置:首页 > 其它

Servlet是单实例,多线程的吗?

2013-11-17 23:11 176 查看
web 应用中 Servlet 只实例化一次,支持多线程是因为其service()方法可以被多次调用。

servlet 的生命周期为:

(1)实例化

默认情况下,servlet在web容器初始化时实例化,调用其init()方法
修改其初始化参数,使其在请求到来的时候实例化:此时,会先检查容器中是否存在servlet实例,如果没有,就实例化一个出来;如果有就使用这个实例

(2)调用doXXX()方法

根据表单的method=post/get ,调用其doPost()/doGet()方法,处理请求和相应数据

(3)销毁

当web容器准备销毁servlet实例时,调用其destory()方法

当有不同的用户对同一个web应用发出请求时,每一个用户都会创建一个servlet实例,但是web容器在维护时,只允许有一个servlet实例存l在JVM中。

我自己理解就是:其实,每一个用户都有对应的servlet实例,但是在使用web应用时,某一个时刻只允许一个servlet实例起作用!

而对于同一个用户,就只有一个servlet实例,并且采取多线程的方式运行其service()方法,处理多请求。

Servlet并不是单例,只是容器让它只实例化一次,变现出来的是单例的效果而已。

Servlet是web容器来控制实例化的,并不是你自己用你编写的代码来实例化,即使你自己编写代码实例化你的servlet,Web服务器也不会直接调用你的实例化的Servlet对象的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: