鍍金池/ 教程/ Linux/ Servlet工作流程
Servlet web.xml welcome-file-list
Servlet從數(shù)據(jù)庫讀取記錄性能優(yōu)化
Servlet URL重寫帶參數(shù)
War文件
Web技術(shù)基礎(chǔ)
Servlet GenericServlet類
Servlet API
Servlet ServletInputStream類
使用MyEclipse創(chuàng)建Servlet
Servlet增刪改查
Servlet ServletConfig配置信息
Servlet Cookies
Servlet重定向
Servlet生命周期
Servlet HttpSession會(huì)話
Servlet HttpServlet類
Servlet注冊表單示例
Servlet表單隱藏字段
Servlet下載文件
Servlet教程
Servlet身份驗(yàn)證過濾器
Servlet ServletOutputStream類
Servlet HttpSession登錄注銷實(shí)例
Servlet啟動(dòng)時(shí)加載
Servlet事件和監(jiān)聽器
使用Eclipse創(chuàng)建Servlet
Servlet ServletContextEvent事件
Servlet HttpSessionEvent統(tǒng)計(jì)在線用戶數(shù)實(shí)例
Servlet RequestDispatcher請求轉(zhuǎn)發(fā)
Servlet使用注釋
Servlet過濾器示例
Servlet過慮器
Servlet ServletContext配置信息
Servlet登錄注銷Cookies實(shí)例
Servlet工作流程
Servlet會(huì)話跟蹤
Servlet登錄實(shí)例
Servlet ServletRequest接口
Servlet ServletRequestEvent類和接口
Servlet入門程序
Servlet查詢搜索數(shù)據(jù)示例
Servlet FilterConfig應(yīng)用示例
Servlet顯示所有頭信息
Servlet屬性設(shè)置
使用NetBeans創(chuàng)建Servlet
Servlet接口實(shí)現(xiàn)
Servlet上傳文件

Servlet工作流程

Servlet是如何工作的?

了解servlet如何工作對了解servlet內(nèi)部工作流程很重要。 在這里,我們將以第一個(gè)servlet程序來講解它的內(nèi)部細(xì)節(jié)。

服務(wù)器檢查servlet是否為第一次被請求?

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

  • 加載servlet類。
  • 實(shí)例化servlet類。
  • 調(diào)用init方法傳遞ServletConfig對象

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

  • 調(diào)用service方法傳遞請求和響應(yīng)對象

Web容器在需要?jiǎng)h除servlet時(shí)調(diào)用destroy方法,例如:在停止服務(wù)器或取消部署項(xiàng)目時(shí)。

Web容器如何處理servlet請求?

Web容器負(fù)責(zé)處理請求。下面來看看看它如何處理請求。

  • 將請求與web.xml文件中的servlet進(jìn)行映射。
  • 為請求創(chuàng)建請求和響應(yīng)對象
  • 調(diào)用線程上的service方法
  • 公共service方法內(nèi)部調(diào)用受保護(hù)的service方法
  • 受保護(hù)的service方法根據(jù)請求的類型調(diào)用doGet方法。
  • doGet方法生成響應(yīng),并將其傳遞給客戶端。
  • 發(fā)送響應(yīng)后,Web容器將刪除請求和響應(yīng)對象。線程包含在線程池中或刪除取決于服務(wù)器實(shí)現(xiàn)。

在公共service方法中寫什么?

公共service方法將ServletRequest對象轉(zhuǎn)換為HttpServletRequest類型和ServletResponse對象轉(zhuǎn)為HttpServletResponse類型。然后調(diào)用傳遞這些對象的service方法。下面來看看內(nèi)部代碼:

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

在受保護(hù)的service方法中編寫什么?

受保護(hù)的service方法檢查請求的類型,如果請求類型為get,則調(diào)用doGet方法,如果請求類型為post,則調(diào)用doPost方法。下面來看看內(nèi)部代碼:

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