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是单实例多线程的技术哦,(这里会存在线程安全的问题,可以利用锁解决,不详述)。

为了让你能够更清晰的了解这个过程,借用前辈的一个时序图,很清晰形象的描述了我上述的文字:

    

       

0 0
原创粉丝点击