• 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实例,但是服务器可以创建有多个实例组成的池,同一时间每个实例都能够处理请求,所以还是应该共享变量进行同步  

  • 相关阅读:
    C++ 重载操作符- 01 简单的入门
    C++ 析构函数
    Auto Control 001 自动控制的一般概念
    C++ 友元
    安装 SQL Server 2014 Express
    关闭是否只查看安全传送的网页内容提示框 和 是否允许运行软件,如ActiveX控件和插件提示框
    Python 网络爬虫 010 (高级功能) 解析 robots.txt 文件
    2019-06-12 Java学习日记之JDBC
    2019-06-11 Java学习日记之Bootstrap
    2019-06-10 Java学习日记之JQuery
  • 原文地址:https://www.cnblogs.com/zhulina-917/p/11431285.html
Copyright © 2020-2023  润新知