首先簡單解釋一下servlet接收和響應客戶請求的過程,首先客戶傳送乙個請求,servlet是呼叫service()方法對請求進行響應的,通過源**可見,service()方法中對請求的方式進行了匹配,選擇呼叫doget,dopost等這些方法,然後再進入對應的方法中呼叫邏輯層的方法,實現對客戶的響應。在servlet介面和genericservlet中是沒有doget,dopost等等這些方法的,httpservlet中定義了這些方法,但是都是返回error資訊,所以,我們每次定義乙個servlet的時候,都必須實現doget或dopost等這些方法。
每乙個自定義的servlet都必須實現servlet的介面,servlet介面中定義了五個方法,其中比較重要的三個方法涉及到servlet的生命週期,分別是上文提到的init(),service(),destroy()方法。genericservlet是乙個通用的,不特定於任何協議的servlet,它實現了servlet介面。而httpservlet繼承於genericservlet,因此httpservlet也實現了servlet介面。所以我們定義servlet的時候只需要繼承httpservlet即可。
servlet的例項過程一般如下:
當伺服器接收乙個客戶端請求時,需要做一下四件事情。
(1) 載入和例項化
如果servlet容器還沒例項化乙個servlet物件,此時容器裝載和例項化乙個 servlet。建立出該 servlet 類的乙個例項。
如果已經存在乙個
servlet物件,此時不再建立新例項。
(2) 初始化
在產生 servlet 例項後,容器負責呼叫該 servlet 例項的 init() 方法,在處理使用者請求之前,來做一些額外的初始化工作。
(3) 處理請求
當 servlet 容器接收到乙個 servlet 請求時,便執行與之對應的 servlet 例項的 service() 方法,service() 方法根據使用者的請求呼叫相對應的
doget或dopost 方法來處理使用者請求。然後再進入對應的方法中呼叫邏輯層的方法,實現對客戶的響應。
(4) 銷毀
當 servlet 容器決定將乙個 servlet 從伺服器中移除時 ( 如 servlet 檔案被更新 ),便呼叫該 servlet 例項的 destroy() 方法,在銷毀該 servlet 例項之前,
來做一些其他的工作。
其中,(1)(2)(4) 在 servlet 的整個生命週期中只會被執行一次。
servlet介面和genericservlet是不特定於任何協議的,而httpservlet是特定於http協議的類,所以httpservlet中實現了service()方法,並將請求servletrequest,servletresponse強轉為httprequest和httpresponse。
public void service(servletrequest req,servletresponse res)
throws servletexception,ioexception
catch(classcastexception e)
service(request,response);
}**的最後呼叫了httpservlet自己的service(request,response)方法,然後根據請求去呼叫對應的do***方法,因為httpservlet中的do***方法都是返回錯誤資訊,
}所以需要我們在自定義的servlet中override這些方法!
servlet工作原理分析
study servlet config helloworld config helloworld jp.co.xiehl.servlet.ch7.helloworldservlet driver aaaaaa 8 url127.1.1.1 30 hello count 簡單對這個servlet進行...
Servlet工作原理解析
1 servlet容器 tomcat容器分四個等級,真正管理servlet的容器是context容器,乙個web應用對應乙個context容器,也就是servlet執行時的servlet容器。新增乙個web應用建立乙個standcontext容器,並且給這個context設定必要的引數,url和pa...
Servlet 工作原理詳細解析
tomcat7 也開始支援嵌入式功能,增加了乙個啟動類org.apache.catalina.startup.tomcat。建立乙個例項物件並呼叫 start 方法就可以很容易啟動 tomcat,我們還可以通過這個物件來增加和修改 tomcat 的配置引數,如可以動態增加 context servl...