Servlet工作流程

Servlet是如何工作的?

瞭解servlet如何工作對了解servlet內部工作流程很重要。 在這裏,我們將以第一個servlet程式來講解它的內部細節。

伺服器檢查servlet是否為第一次被請求

如果是第一次被請求,則 -

  • 加載servlet類。
  • 實例化servlet類。
  • 調用init方法傳遞ServletConfig對象

如果不是第一次被請求,則 -

  • 調用service方法傳遞請求和回應對象

Web容器在需要刪除servlet時調用destroy方法,例如:在停止伺服器或取消部署專案時。

Web容器如何處理servlet請求?

Web容器負責處理請求。下麵來看看看它如何處理請求。

  • 將請求與web.xml檔中的servlet進行映射。
  • 為請求創建請求和回應對象
  • 調用線程上的service方法
  • 公共service方法內部調用受保護的service方法
  • 受保護的service方法根據請求的類型調用doGet方法。
  • doGet方法生成回應,並將其傳遞給客戶端。
  • 發送回應後,Web容器將刪除請求和回應對象。線程包含線上程池中或刪除取決於伺服器實現。

在公共service方法中寫什麼?

公共service方法將ServletRequest對象轉換為HttpServletRequest類型和ServletResponse對象轉為HttpServletResponse類型。然後調用傳遞這些對象的service方法。下麵來看看內部代碼:

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

在受保護的service方法中編寫什麼?

受保護的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
    }
}

上一篇: Servlet生命週期 下一篇: War檔