Servlet生命周期
来源:互联网 发布:es6 数组的遍历 编辑:程序博客网 时间:2024/06/05 18:07
一,什么是生命周期?
顾名思义,就是从出生到死亡这么一个周期,也就是创建Servlet到销毁Servlet的过程,那么为什么要介绍这么一个生命周期呢,因为Servlet不像我们之前接触的那样,是new一个对象,而是由Tomcat控制的(小命掌握在别人手里呐*~*)
所以我们必须要了解它的生命周期,这样才能更好的用它!
二:四个生命周期方法
我们先通过一个例子给大家演示一下:
package lm.practice;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by Administrator on 2017/3/23. */public class ServletLife extends HttpServlet { /** * 1.构造方法 */ public ServletLife(){ System.out.println("-----构造方法被调用了------"); } /** * 2.init方法 * @param config * @throws ServletException */ @Override public void init(ServletConfig config) throws ServletException { System.out.println("-----init方法被调用了----"); } /** * 3.service方法 * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("------service方法被调用了-----"); } /** * 4.destory方法 */ @Override public void destroy() { System.out.println("------destroy被调用了------"); }}
配置ServletLife:
<servlet> <servlet-name>ServletLife</servlet-name> <servlet-class>lm.practice.ServletLife</servlet-class></servlet><servlet-mapping> <servlet-name>ServletLife</servlet-name> <url-pattern>/life</url-pattern></servlet-mapping>
运行,在地址栏中输入:http://localhost:8080/20170323/life
仔细看Idea的控制台,会出现这样的信息:
刷新页面之后:
每刷新一次页面,就会输出-------service方法被调用了---------字符串,没有输出构造方法和init方法
关闭tomcat或者重新部署web应用程序,控制台输出:
看到这里,你是不是有什么想法呢?
这就是我要说的
在Servlet的生命周期里,有四个方法,构造方法、init方法、service方法和destory方法,其中构造方法和init方法分别是在运行Servlet的时候执行的,只执行一次,而service方法是每次执行servlet都会执行一次service方法,而destory就是销毁servlet的方法,是在结束服务的时候执行的。这就是servlet的生命周期。
而每次执行servlet方法时只执行一次构造方法和init方法,可见servlet是单实例的,而多次执行servcie方法不言而喻是多线程的,所以servlet是单实例多线程的技术哦,(这里会存在线程安全的问题,可以利用锁解决,不详述)。
为了让你能够更清晰的了解这个过程,借用前辈的一个时序图,很清晰形象的描述了我上述的文字:
- servlet生命周期
- Servlet 生命周期
- Servlet生命周期
- servlet生命周期
- Servlet生命周期
- Servlet生命周期
- Servlet生命周期
- servlet生命周期
- servlet生命周期!
- Servlet生命周期
- Servlet生命周期
- Servlet生命周期
- servlet生命周期
- Servlet生命周期
- Servlet生命周期
- servlet生命周期
- servlet生命周期
- servlet生命周期
- 内核模块的编写
- reviewboard + svn 进行代码审核和版本控制
- rgba()和opacity的区别
- DC系数和AC系数
- 游戏开发完整学习路线
- Servlet生命周期
- Caffe使用:如何将一维数据或其他非图像数据转换成lmdb
- Swift和OC控制器互相跳转
- 解决QT中错误error: QApplication: No such file or directory #include <QApplication>
- 网易云信短信验证
- linux下select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- android应用中去掉标题栏需要注意的地方
- 报错原因:Incompatible pointer types sending 'UIImage *' to parameter of type 'NSString * _Nonnull'
- 改环境变量改出问题了,vi,ls这些命令都不能用了,怎么办