Servlet生命周期

一,什么是生命周期?

顾名思义,就是从出生到死亡这么一个周期,也就是创建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是单实例多线程的技术哦,(这里会存在线程安全的问题,可以利用锁解决,不详述)。

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

    

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值