【转】Servlet笔记
一、Servlet是单实例多线程的工作方式
- 由一个Servlet容器来管理Servlet,比如Tomcat。Servlet容器维护了一个线程池来服务客户端的请求。
- 当发送多个请求给一个Servlet时候,容器接收到之后,容器的调度者线程会从线程池中选出几个工作者线程,将请求传递给工作者线程,然后由工作者线程以并发的方式来执行Servlet的service()方法
- 所以Servlet是线程不安全的,参数需要本地化,参数最好不要设置成成员变量(此时需要同步Sychronized,保证线程安全)。(Servlet访问ServletContext,HttpSession等共享的消息也需要保证线程安全)
二、Servlet生命周期
三个阶段
- 初始化阶段init()方法,只初始化一次
- 响应客户请求阶段service()方法
- 终止阶段destroy()方法
Servlet初始化阶段
- Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>之间添加如下代码:
<loadon-startup>1</loadon-startup> - 在Servlet容器启动后,客户首次向Servlet发送请求
- Servlet类文件被更新后,重新装载Servlet
Servlet响应请求阶段
- 对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
- 对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中
Servlet终止阶段
- 当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。
【转自http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html】

浙公网安备 33010602011771号