Servlet 生命周期

Servlet 的生命周期

  • 服务器只创建Servlet的单一实例,所以他的init方法只会调用一次,每个用户发送的请求都会创建一个新的线程,调用service方法   然后service方法开始检查HTTP请求的类型(GET,POST,PUT,DELETE),然后调用相应的类型方法
  • service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
  • servlet类中有几个抽象的方法,其中一个就是service()方法。每次有请求传入时,开启一个新线程调用service方法.
  • JDK只是定义了servlet接口,而实现servlet接口的比如tomcat, jboss等服务器

 分析源码就可以知道 service 会根据请求的类型来调用相应的请求的方法

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

        String method = req.getMethod();

        if (method.equals(METHOD_GET)) {
            ...
                doGet(req, resp);
            ...

        } else if (method.equals(METHOD_HEAD)) {
            long lastModified = getLastModified(req);
            maybeSetLastModified(resp, lastModified);
            doHead(req, resp);

        } else if (method.equals(METHOD_POST)) {
            doPost(req, resp);

        } else if (method.equals(METHOD_PUT)) {
            doPut(req, resp);

        } else if (method.equals(METHOD_DELETE)) {
            doDelete(req, resp);

        } else if (method.equals(METHOD_OPTIONS)) {
            doOptions(req,resp);

        } else if (method.equals(METHOD_TRACE)) {
            doTrace(req,resp);

        } else {
           ...
        }
    }

如果重写了service方法

Servlet的生命周期可以分为四个阶段,即装载类及创建实例阶段、初始化阶段、服务阶段和实例销毁阶段

  1、初始化阶段  调用init()方法  初次载入Servlet时只会执行一次

  2、响应客户请求阶段。调用service()方法,由service()方法根据提交的方式选择执行doGet()或者doPost()方法

  3、终止阶段  调用destroy()方法

如果系统有多个请求同时访问一个servlet实例那么会不会产生 并发情况,事实上,大多数情况下,系统将所有的请求排队,一次只将一个请求转给单个Servlet实例,但是服务器可以创建有多个实例组成的池,同一时间每个实例都能够处理请求,所以还是应该共享变量进行同步  

 

posted @ 2019-08-29 18:10  纳兰容若♫  阅读(125)  评论(0编辑  收藏  举报