魯春利的工作筆記,好記性不如爛筆頭
Servlet的架構是由兩個Java包組成:javax.servlet和javax.servlet.http。
在javax.servlet包中定義了所有的Servlet類都必須實作或擴充的的通用接口和類。
在javax.servlet.http包中定義了采用HTTP通信協定的HttpServlet類。
Servlet的架構的核心是javax.servlet.Servlet接口,所有的Servlet類都直接或間接實作這一接口。
每一個Servlet就是一個運作于Web server中的小Java程式。Servert接收并響應Web client的請求,通常為HTTP協定的請求。
為了實作Servlet,可以實作該接口,或者是繼承javax.servlet.GenericServlet或javax.servlet.http.HttpServlet。
Servlet接口中定義了5個方法,其中有3個方法代表了Servlet的生命周期:
init方法:初始化servlet對象
service方法:處理用戶端請求
destory方法:當Servlet對象退出生命周期時,負責釋放占有的資源
除此之外,Servlet接口還定義了getServletConfig和getServletInfo方法:
getServletConfig方法:用來擷取servlet啟動資訊
getServletInfo方法:使用者來氣servlet本身的基本資訊,如作者、版本号或版權資訊等
GenericServlet定義了一個通用的、與實作協定無關的Servlet。
GenericServlet簡化了Servlet程式的開發,因為它已經對于Servlet生命周期的init和destory提供了簡單實作(空方法),并且實作了ServletConfig接口的所有方法。另外,GenericServlet也實作了ServletContext 接口中聲明的log方法。
HttpServlet類擴充了GenericServlet并且提供了servlet接口中基于HTTP的實作,一般情況下都是通過該類來擴充Servlet。
HttpServlet定義了兩種形式的service方法:
實作自定義Servlet的方式
實作Servlet接口,實作其所有方法;
繼承GenericServlet抽象類,實作其service方法;
繼承HttpServlet抽象類,實作其doGet或doPost方法。
HttpServet的響應過程
當Web容器接收到某個Servlet請求時,Servlet把請求封裝成一個HttpServletRequest對象,然後把對象傳給Servlet的對應的服務方法。
HttpServlet容器響應Web客戶請求流程如下:
1)Web客戶向Servlet容器發出Http請求;
2)Servlet容器解析Web客戶的Http請求;
3)Servlet容器建立一個HttpRequest對象,在這個對象中封裝Http請求資訊;
4)Servlet容器建立一個HttpResponse對象;
5)Servlet容器調用HttpServlet的service方法,把HttpRequest和HttpResponse對象作為service方法的參數傳給HttpServlet對象;
6)HttpServlet調用HttpRequest的有關方法,擷取HTTP請求資訊;
7)HttpServlet調用HttpResponse的有關方法,生成響應資料;
8)Servlet容器把HttpServlet的響應結果傳給Web客戶。
自定義Servlet示例