【转】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】

posted @ 2016-08-23 21:48  Sato~  阅读(71)  评论(0)    收藏  举报