📜  Servlet的工作方式

📅  最后修改于: 2021-01-09 12:31:53             🧑  作者: Mango

Servlet如何工作?

重要的是要了解servlet的工作原理,以更好地理解servlet。在这里,我们将获得有关第一个servlet程序的内部细节。

服务器检查第一次是否请求servlet。

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

  • 加载servlet类。
  • 实例化servlet类。
  • 调用传递ServletConfig对象的init方法

其他

  • 调用传递请求和响应对象的服务方法

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

Web容器如何处理Servlet请求?

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

  • 将请求与web.xml文件中的servlet映射。
  • 为此请求创建请求和响应对象
  • 在线程上调用服务方法
  • 公共服务方法在内部调用受保护的服务方法
  • 受保护的服务方法根据请求的类型调用doGet方法。
  • doGet方法生成响应并将其传递给客户端。
  • 发送响应后,Web容器将删除请求和响应对象。线程是包含在线程池中还是被删除取决于服务器实现。

公共服务方法中写了什么?

公共服务方法将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);
    }

受保护的服务方法中写了什么?

受保护的服务方法检查请求的类型,如果请求类型为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
        }
    }