天天看點

【Head First Servlets and JSP】筆記6:什麼是響應首部 & 快速搭建一個簡單的測試環境

​​搭建簡單的測試環境​​

​​什麼是響應首部​​

​​最簡單的響應首部——Content-Type​​

​​設定響應首部​​

​​請求重定向與響應首部​​

​​在浏覽器中檢視Response Headers​​

1、先快速搭建一個簡單的測試環境,以後的内容都将基于下面的這些代碼,tomcat webapps:html5+web.xml+servlet

 這個Servlet應該很好了解,就是點選submit後将跳出一個帶有一行“Hello World”的頁面。

2、什麼是響應首部。

響應首部(Response Headers)屬于HTTP首部中的一種。

首先,需要了解的是:響應首部并不包括使用者想看到的資訊、“多媒體”頁面,也就是說,對于普通網民,不需要知道這些資訊。

那麼,響應首部是幹嘛的呢?主要是用于協助用戶端和伺服器的通信,例如,伺服器要在響應首部中告知用戶端傳回的内容是html,還是jar、zip,這樣浏覽器才能做出正确的響應:展示頁面or提供下載下傳。

3、最簡單的響應首部——Content-Type

在響應首部中以Content-Type這個字段來表示封包主體的對象類型,可以做一個測試,如果修改servlet為:

修改之後,當我們在浏覽器頁面中點選submit的時候,得到的将不是一個Hello World的頁面,而是直接下載下傳MyTest.do這個檔案,不過它的内容将是Hello World<br />。需要注意的是,如果你萬一把Content-Type給打錯了,那麼setHeader并不會幫你指出錯誤,而是添加一個“錯别字”首部!

4、可以設定響應首部,也可以增加響應首部。

繼續修改servlet,把setHeader改為addHeader:

很容易猜到運作結果:既提供下載下傳又轉到Hello World頁面,然而這是錯的,實際測試的結果是:隻提供下載下傳而不提供頁面展示。

還有一個設定Header的方法為:setIntHeader,效果和setHeader類似,不過首部的值不再是String類型,而是int型。

其它設定Header的方法可以參看​​官方api​​,并不多。

5、把請求重定向到另外一個完全不同的URL,也就是把請求轉發給另一個人來處理。可以使用形如下面的代碼完成:

修改之後,當我們按下submit的時候,将會直接跳轉至新的URL,(當然,在這裡新跳轉的URL并不處理請求)。

sendRedirect的用法不難了解,那麼當resp.sendRedirect的時候,實質上發生了什麼?

這個時候我們想,一定是改變了響應的首部,如果有一個方法可以直接檢視HTTP封包就好了,那我們就可以确切的知道發生了什麼。

6、那麼如果檢視Response Headers呢?

在谷歌浏覽器下,按F12進入開發者頁面,可以通過這個方法,來觀察上面代碼對響應首部(Response Headers)的實際影響。如下所示(點選可檢視大圖):

​​

【Head First Servlets and JSP】筆記6:什麼是響應首部 & 快速搭建一個簡單的測試環境

 點開Network,可以觀察到一個名為Loction的首部,内容正好是我們重定向的URL,那麼如果把Servlet代碼改為“resp.setHeader("Location", "http://www.cnblogs.com/xkxf/");”可以實作重定向嗎?答案是不可以,不過再補充一句“resp.setStatus(302);”倒是可以實作這個效果。

7、最後,sendRedirect("另一個URL")到底意味着什麼呢?書上的解釋是:希望浏覽器用“另一個URL”處理請求,它的真正用法是:

“另一個URL”也可使用相對URL,需要區分的是

sendRedirect("foo/hi.html");将重定向到相對于目前URL建立的完整URL

sendRedirect("/foo/hi.html");将重定向到相對于Web app根目錄的完整URL