美文网首页
Java Servlet 运行原理分析

Java Servlet 运行原理分析

作者: 平凡的柚子 | 来源:发表于2021-01-12 13:35 被阅读0次

    1 Servlet基本执行过程

    Web容器(如Tomcat)判断当前请求是否第一次请求Servlet程序 。

    如果是第一次,则Web容器执行以下任务:

    • 加载Servlet类。
    • 实例化Servlet类。
    • 调用init方法并传入ServletConfig对象

    如果不第一次执行,则:

    • 调用service方法,并传入request和response对象

    Web容器在需要删除Servlet时(例如,在停止服务器或重新部署项目时)将调用destroy方法。

    2 Web容器如何处理Servlet请求

    Web容器负责处理请求。让我们看看它如何处理请求。

    • 将用户请求与web.xml文件中的Servlet进行映射。
    • 创建请求和响应对象
    • 创建新的线程,并在该线程上调用Servlet的service方法
    • 在public的service方法内部调用protected的service方法
    • protected的service方法根据请求的类型调用doGet方法。
    • doGet方法生成响应并将其传递给客户端。
    • 发送响应后,Web容器将删除请求和响应对象。该线程是继续留在线程池中还是被删除取决于服务器实现。

    3 public的service方法部分源码

    public的service方法将ServletRequest对象转换为HttpServletRequest类型,而ServletResponse对象转换为HttpServletResponse类型。然后,调用传递这些对象的服务方法。让我们看一下内部代码:

    public void service(ServletRequest req, ServletResponse res) 
      throws ServletException, IOException 
    { 
      HttpServletRequest request; 
      HttpServletResponse response; 
      try 
      { 
        request = (HttpServletRequest)req; 
        response = (HttpServletResponse)res; 
      } 
      catch(ClassCastException e) 
      { 
        throw new ServletException("non-HTTP request or response"); 
      } 
      service(request, response); 
    } 
    

    4 protected的service方法部分源码

    protected的service方法判断请求的类型,如果请求类型为GET,则调用doGet方法,如果请求类型为POST,则调用doPost方法,依此类推。让我们看一下内部代码:

    protected void service(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException 
    { 
      String method = req.getMethod(); 
      if(method.equals("GET")) 
      { 
        long lastModified = getLastModified(req); 
        if(lastModified == -1L) 
        { 
          doGet(req, resp); 
        }  
    .... 
    //rest of the code 
      } 
    }
    

    最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:11604713672

    相关文章

      网友评论

          本文标题:Java Servlet 运行原理分析

          本文链接:https://www.haomeiwen.com/subject/apldaktx.html