servlet運行原理詳解 自我學習整理
Servlet體系結構是建立在java多線程機制之上的,它的生命週期是由web容器負責管理的。當user從client端向web服務器發送一個http請求時,服務器就會分配一個線程來服務這個http請求,web容器會檢查是否有與此http url映射對應的servlet,如果沒有servlet容器會根據web.xml配置文件加載對應的servlet,并創建此servlet的實例,調用servlet init方法進行初始化參數設定。創建一個用於封裝http請求的HttpServletRequest對象和一個封裝響應HttpServletResponse對象,然後調用Servlet對象的service方法,並將請求和響應對象作為參數傳遞進去。如果有則直接調用Servlet對象的service方法。 當reload webapp、重啟tomcat、或者關閉電腦時就會調用destory方法來銷毀servlet實例。 至此,servlet的生命週期結束。 當有新user向服務器發出請求時,一般不會再創建Servlet實例,也就是多個線程在使用這個servlet。 當容器收到一個servlet請求,調度線程從線程池中選出一個工作者線程,將請求傳遞給該工作者線程 ,然後由該線程來執行Servlet的servic方法,當這個線程正在執行的時候,容器收到另外一個請求,調度著線程同樣從線程池選出另外一個工作者線程來服務新的請求,容器并不關心這個請求是否訪問同一個Servlet,當容器同時收到對同一個Servlet的多個請求時,那麼這個Servlet的service()方法將在多線程中幷發執行。 Servlet容器默認採用單實例多線程的方式來處理請求,這樣減少產生Servlet實例的開銷,提升了對請求的響應時間,對於Tomcat可以在server.xml中通過
元素設置線程池中線程的數目。
暂无评论