刚开始学Servlet时,只想着去学怎么用Servlet了,没有想过Servlet怎么工作的?今天花点时间总结一下,给你加油!!!
Servlet生命周期
大家都知道Servlet的生命周期分为三个阶段:
1、初始化阶段——调用Servlet的init()方法。在属于下面情况时,Servlet容器会装载Servlet:
- 在web.xml文件中的<servlet></servlet>之间有添加如下代码时,Servlet容器启动时自动装载某些Servlet,
<loadon-startup>1</loadon-startup>
这里的loadon-startup取值有三种情况:
1) 小于0,负数的情况下,Web容器启动时不做实例化,当Servlet首次被调用时实例化。
2) 大于0,Web容器启动时实例Servlet,顺序是由小到大,小值先被实例化。
3) 等于0,相当于是最大正整数,Web容器启动时最后被实例化,
注意:不设置的话,则第一次请求时被实例化。
-
Servlet容器启动后,客户端首次向Servlet发送请求
- Servlet类文件被更新后,重新装载Servlet,重新实例化
2、响应客户请求阶段——调用Servlet的service()方法。
3、销毁——调用Servlet的destroy()方法,当Servlet容器(Tomcat)停止或重新启动时,就会调用Servlet的destroy()方法销毁,释放资源。
在整个生命周期中,Servlet只被实例化一次,即单实例,只被销毁一次
Servlet工作原理
Servlet工作原理基本上都是出于第二阶段,即响应客户请求阶段。在这里就举个TomcatServlet是如何工作的,看下面几步:
- 客户端向Servlet容器(Tomcat)发出Http请求
- Servlet容器接收客户端的请求
- Servlet容器创建一个HttpServletRequest对象,将客户端请求的信息封装到这个对象中
- Servlet容器创建一个HttpServletResponse对象
- Servlet容器调用HttpServlet对象的service()方法,把HttpServletRequest对象与HttpServletResponse对象作为参数传递给HttpServlet
- HttpServlet调用HttpServletRequest对象的相关方法获取Http请求信息
- HttpServlet调用HttpServletResponse对象的相关方法,生成响应数据
- Servlet容器把HttpServlet的响应结果传给客户端
对于不理解Servlet的service()方法如何调用doGet()、doPost()等doXxxx()方法的,可以去http://blog.csdn.net/shixhzjy/article/details/8945849看看。