前言
在前面對HTTP請求的相關信息和Servlet是如何對HTTP請求進行處理的,接下來學習HTTP
響應,以及Servlet對HTTP響應的處理。之後掌握Servlet對錶單的處理,以一個簡單的登錄驗證
來學習。
HTTP響應
同樣的先看看病了解下HTTP響應的格式。與HTTP請求類似HTTP響應也由3個部分組成:
1、協議狀態版本代碼描述
2、響應頭
3、響應正文
下面就是一個HTTP響應的實例:
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
協議狀態代碼描述類似於HTTP請求的第一行,它描述了通信所用的協議的版本,服務器對HTTP
請求處理的結果狀態, 200表示成功。
響應頭:和請求頭類似,其中包含了許多有用的信息,例如服務器類型、日期時間等。
響應正文:響應正文就是服務器返回的內容,一般情況下是HTML靜態頁面。
值得一提是在協議狀態版本代碼描述中包含了HTTP狀態碼的信息例如200,它反映了服務器處理
HTTP請求的狀態,瞭解一些常見的狀態碼,是有一些好處的。
200 表示一切ok
404 表示請求資源not found
500 表示服務器內部錯誤
.................................
至於更詳細的東西,讀者可以參考下面一篇文章:
http://www.360doc.com/content/10/0902/16/691214_50674867.shtml
Servet對HTTP響應的處理
Servlet對響應的處理同樣是通過HttpServletResponse進行封裝的,就此反射一下,看看實際的
實現類是什麼。
class org.apache.catalina.connector.ResponseFacade反射出來是Tomcat catalina裏面的類,這裏先不管,直接看Servlet源碼中HttpResponse提供的
一些比較重要的方法。
addCookie()添加Cookie
setHeader()設置響應頭
getWriter():得到PrintWriter對象用於向客戶端傳送普通文本。
getOutputStream():得到OutputStream對象用於向客戶端傳送二進制文本。
sendRedirect():請求重定向,吧請求定位到另一個URL上,注意和請求轉發的區別。
這裏需找個時間做個總結。
看例子程序:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(response.getClass()); response.sendRedirect("index.jsp"); }當程序請求此Servlet,該Servlet會將請求重定向到index.jsp,最後將index.jsp裏面的內容
返回給瀏覽器。
表單處理
我們知道瀏覽器顯示的html靜態網頁,那麼客戶端和服務器是如何進行信息交互的呢?
換句話說客戶端的數據時如何提交到服務器的呢?這就要使用表單了,使用表單提交數據。
下面通過一個登陸驗證來實現表單數據的提交和驗證,順便將上一篇Servlet對HTTP請求的
處理和響應的處理結合起來。
首先完成一個簡單的登錄界面,login.jsp這裏
<form action="LoginCheck" method="post"> 姓名:<input type="text" name ="username"/></br> 密碼:<input type="password" name="password"/> </br> <input type="submit" value="登錄"/> </form>
在LoginCheck中進行簡單的登錄驗證
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Tomcat將表單信息封裝到請求正文中 //通過request對象得到表單信息 String name = request.getParameter("username"); String password = request.getParameter("password"); //驗證 if(name.equals("kiritor")&&password.equals("kiritor")) { //跳轉到首頁,請求轉發方式 request.getRequestDispatcher("index.jsp").forward(request, response); } else { //跳轉錯誤信息頁面,請求重定向方式 response.sendRedirect("error.jsp"); } }至於登錄成功與失敗的兩種情況,這裏就不貼圖了。
可以看見的是上述表單的提交筆者使用的post方法,我們知道表單的提交方式還有get的
方式,兩種到底有什麼區別呢?後續總結。
還有驗證成功與驗證失敗的跳轉方式也不一樣,一種是請求轉發、一種是重定向,兩者
具體的用法和區別後續討論之。over!