servlet生命周期中的一点杂谈-待完善

1)首先,能够获得大家一致认可的是,不论一个servlet保存多长时间,它的生存周期肯定会短于容器的生存期,servlet实例在容器被移除之前被销毁,即所谓的“皮之不存,毛何附焉”;
(2)servlet生存期的定义,包括加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
(3)重点是:servlet采用的是单实例,多线程模式,即在同一时刻,容器中只存在某servlet的一个实例;同时,多请求(用户)会获得多个线程来运行同一个实例;
(4)在容器生命周期内,不同时间段会生存servlet的不同实例,可以理解为:A servlet在“时间段一”存在实例A.1,在“时间段二”会存在实例A.2;容器可以根据需要对长时间没有被请求的servlet实例销毁,在必要的时候再生成。

servlet在服务器中只有一个实例,每个请求会获得一个线程运行这个实例(这也是为什么对于一些操作步骤要synchronize,因为线程的轮换执行可能会对同一个servlet的共享的数据造成混乱)

servlet是首次加载后,生成了相关对象保存在web容器中,该对象是灌注整个web容器的始终,直到web容器关闭。可以参考servlet的生命周期,该对象被实例化后保存在web容器中,当有请求时web容器先截获,然后web容器开启一条线程去servlet的map集合里根据request报头寻找相关的servlet处理请求,该线程是一直处理该request,直到处理结束,响应请求。该线程结束,但是servlet对象是不会被销毁的,他还是保留在web容器中。多个请求同一servlet时就是开启多条线程响应请求。

发表评论

电子邮件地址不会被公开。 必填项已用*标注