天天看點

《Servlet、JSP和Spring MVC初學指南》——1.9 Http Servlets

本節書摘來自異步社群《servlet、jsp和spring mvc初學指南》一書中的第1章,第1.9節,作者:【加】budi kurniawan(克尼亞萬) , 【美】paul deck著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

不說全部,至少大多數應用程式都要與http結合起來使用。這意味着可以利用http提供的特性。javax.servlet.http包是servlet api中的第二個包,其中包含了用于編寫servlet應用程式的類和接口。javax.servlet.http中的許多類型都覆寫了javax.servlet中的類型。

圖1.5展示了javax.servlet.http中的主要類型。

《Servlet、JSP和Spring MVC初學指南》——1.9 Http Servlets

圖1.5 javax.servlet.http中的主要類型

1.9.1 httpservlet

httpservlet類覆寫了javax.servlet.genericservlet類。使用httpservlet時,還要借助分别代表servlet請求和servlet響應的httpservletrequest和httpservletresponse對象。httpservletrequest接口擴充javax.servlet.servletrequest,httpservletresponse擴充javax.servlet.servletresponse。

httpservlet覆寫genericservlet中的service方法,并通過下列簽名再添加一個service方法:

新service方法和javax.servlet.servlet中service方法之間的差別在于,前者接受httpservletrequest和httpservletresponse,而不是servletrequest和servletresponse。

像往常一樣,servlet容器調用javax.servlet.servlet中原始的service方法。httpservlet中的編寫方法如下:

原始的service方法将servlet容器的request和response對象分别轉換成httpservletrequest和httpservletresponse,并調用新的service方法。這種轉換總是會成功的,因為在調用servlet的service方法時,servlet容器總會傳入一個httpservletrequest和一個httpservletresponse,預備使用http。即便正在實作javax.servlet.servlet,或者擴充javax.servlet.genericservlet,也可以将傳給service方法的servlet request和servlet response分别轉換成httpservletrequest和httpservletresponse。

然後,httpservlet中的service方法會檢驗用來發送請求的http方法(通過調用request.getmethod),并調用以下方法之一:doget、dopost、dohead、doput、dotrace、dooptions和dodelete。這7種方法中,每一種方法都表示一個http方法。doget和dopost是最常用的。是以,不再需要覆寫service方法了,隻要覆寫doget或者dopost,或者覆寫doget和dopost即可。

總之,httpservlet有兩個特性是genericservlet所不具備的:

不用覆寫service方法,而是覆寫doget或者dopost,或者覆寫doget和dopost。在少數情況下,還會覆寫以下任意方法:dohead、doput、dotrace、dooptions和dodelete。

使用httpservletrequest和httpservletresponse,而不是servletrequest和servletresponse。

1.9.2 httpservletrequest

httpservletrequest表示http環境中的servlet請求。它擴充javax.servlet.servletrequest接口,并添加了幾個方法。新增的部分方法如下:

<code>java.lang.string getcontextpath()</code>

傳回表示請求上下文的請求uri部分。

<code>cookie[] getcookies()</code>

傳回一個cookie對象數組。

<code>java.lang.string getheader(java.lang.string name)</code>

傳回指定http标題的值。

<code>java.lang.string getmethod()</code>

傳回生成這個請求的http方法名稱。

<code>java.lang.string getquerystring()</code>

傳回請求url中的查詢字元串。

<code>httpsession getsession()</code>

傳回與這個請求相關的會話對象。如果沒有,将建立一個新的會話對象。

<code>httpsession getsession(boolean create)</code>

傳回與這個請求相關的會話對象。如果有,并且create參數為true,将建立一個新的會話對象。

1.9.3 httpservletresponse

httpservletresponse表示http環境中的servlet響應。下面是它裡面定義的部分方法:

<code>void addcookie(cookie cookie)</code>

給這個響應對象添加一個cookie。

<code>void addheader(java.lang.string name, java.lang.string value)</code>

給這個響應對象添加一個header。

<code>void sendredirect(java.lang.string location)</code>

發送一條響應碼,将浏覽器跳轉到指定的位置。

下面的章節将進一步學習這些方法。