Servle的生命周期——初始化、运行、销毁全部过程
Servlet初始化、运行、销毁全部过程
Servlet体系结构是建立在 Java 多线程机制上的,它的生命周期由 Web 容器负责
Servlet 生命周期定义了 Servlet 从创建到毁灭的整个过程,总共分为四个步骤:
调用 init() 方法初始化
调用 service() 方法来处理客户端的请求
调用 destroy() 方法释放资源,标记自身为可回收
被垃圾回收器回收
注:当客户端第一次请求某个 Servlet 时,Servlet 容器将会根据 web.xml 的配置文件实例化这个 Servlet 类。当有新的客户端请求该 Servlet 时,一般不会再实例化该 Servlet 类。
当有多个请求时,Servlet 容器会起多个线程来访问同一个 Servlet 实例的 service() 方法,如果该 Servlet 实例中有共享的实例变量,需要注意多线程安全问题。
servlet初始化
servlet初始化步骤
- Servlet容器加载servlet类,把它的.Class文件中的数据读到内存中。
- Servlet容器创建servletConfig对象。servletConfig对象包含了servlet的初始化配置信息。此外servlet容器还会使得servletConfig对象与当前的web应用的servletContext对象关联。
- Servlet容器创建servlet对象。
- Servlet容器调用servlet对象的init(ServletConfig config)方法。
通过初始化步骤,创建了servlet对象和servletConfig对象,并且servlet对象与servletConfig对象关联,而servletConfig对象又与当前对象的servletContext对象关联。当servlet容器完成servlet后,servlet对象只要通过getServletContext()方法就能得到web应用的servletContext对象。
servlet初始化的三种情况
1.Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的Servlet元素之间添加如下代码:
<loadon-startup>1</loadon-startup>
说明:
改代码中的数值当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
2.在Servlet容器启动后,客户首次向Servlet发送请求
3.Servlet类文件被更新后,重新装载Servlet
servlet运行
当servlet容器接到特定的http请求时,Servlet 容器会产生一个新的线程,创建针对与这个请求的servletRequest和servletResponse对象并调用 Servlet实例的 service 方法。并把这两个对象当做参数传递给service()方法,service方法会检查 HTTP 请求类型(GET、POST、PUT、DELETE等;并在适当的时候调用doGet、doPost、doPut、doDelete方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过servletResponse对象生成响应结果。在这个阶段sevlet可以随时响应客户端的请求。
并把这两个对象当做参数传递给service()方法
对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
private Hashtable<String String[]> paramHashStringArray =
new Hashtable<String String[]>();
这是一个String–>String[]的键值映射。
HashMap线程不安全的,Hashtable线程安全。
servlet销毁
当Web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的
destroy()方法,然后再销毁servlet对象。此外容器还会销毁与servlet对象关联的servletConfig对象。
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时调用。destroy() 方法主要执行如关闭数据库连接、释放资源等行为。
调用 destroy 方法之后,servlet 对象被标记为垃圾回收,等待 JVM 的垃圾回收器进行处理。
鉴于自身知识有限,所以我写的内容大部分来源于网络中已有知识的吸收理解,欢迎各位转载,评论,大家一起学习进步!如有侵权,请及时和我联系。
上一篇: 文件的上传
下一篇: fastdfs文件上传