分析Servlet运行原理

原文连接:http://www.yiidian.com/servlet/servlet-how-work.htmlhtml

接下来咱们有必要了解下Servlet的工做原理,这样才能更好地理解Servlet。本文咱们将以以前开发过的Servlet程序来说解Servlet的内部细节。java

1 Servlet基本执行过程

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

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

  • 加载Servlet类。yii

  • 实例化Servlet类。学习

  • 调用init方法并传入ServletConfig对象 若是不第一次执行,则:网站

  • 调用service方法,并传入request和response对象 Web容器在须要删除Servlet时(例如,在中止服务器或从新部署项目时)将调用destroy方法。线程

2 Web容器如何处理Servlet请求

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

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

3 public的service方法部分源码

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

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  
    }  
}

file

欢迎关注个人公众号::一点教程。得到独家整理的学习资源和平常干货推送。 若是您对个人系列教程感兴趣,也能够关注个人网站:yiidian.com

相关文章
相关标签/搜索