Servlet的生命周期

2017-11-19 11:53:26

    生命周期:就是一个对象从创建到销毁的过程。

    Servlet的生命周期:Servlet从创建到销毁的过程。


    Servlet 接口: javax.servlet.Servlet接口

    init(ServletConfig)方法,初始化方法

    service(ServletRequest,ServletResponse)方法,每次访问都会调用来处理请求

    destory()方法,销毁servlet方法。

    

    HttpServlet接口:javax.servlet.http

    继承自Servlet接口,并重新实现了service方法,根据不同请求方式调用不同的处理方法。

    service(HttpServletRequest,HttpServletResponse)方法,获取请求方式,分别调用doGet(),或者doPost()方法。

    当服务器关闭或者项目被移除服务器,destory方法会执行,生命周期结束。


    相关测试代码:

package net.zixue.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Test4Servlet",urlPatterns = "/test4")
public class Test4Servlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("init 被执行了");
        super.init();
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service 被执行了");
        super.service(req, resp);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doget 被执行了");
    }

    @Override
    public void destroy() {
        System.out.println("destroy 被执行了");
        super.destroy();
    }
}

    第一次执行如图所式:

    aa.png

    第二次执行如图所式
    1.png


    关闭服务,执行效果如图所示

    2.png


    注意:Servlet实例是单例的,即无论请求多少次Servlet,最多只有一个Servlet实例,如果是多个客户端并发,同时访问Servlet的时候,服务会启动多个线程分别执行Servletr的service方法。

    原因:如果我们每次访问都创建一个Servlet实例,会占用和浪费过多的计算机资源。