Java Web學習(1): 客戶端請求、服務器響應及其HTTP狀態碼


一JSP客戶端請求

       當瀏覽器請求一個網頁時,它會向網絡服務器發送一系列不能被直接讀取的信息,因為這些信息是作為HTTP信

頭的一部分來傳送的。我們可以查閱HTTP協議來獲得更多的信息。

       下表列出了瀏覽器端信息頭的一些重要內容,在以后的網絡編程中將會經常見到這些信息:

   (1)HttpServletRequest類

       request對象是javax.servlet.http.HttpServletRequest類的實例。每當客戶端請求一個頁面時,JSP引擎就會產

生一個新的對象來代表這個請求。

       request對象提供了一系列方法來獲取HTTP信息頭,包括表單數據,cookies,HTTP方法等等。

       接下來將會介紹一些在JSP編程中常用的獲取HTTP信息頭的方法。詳細內容請見下表:

 

 

 

(2)HTTP信息頭示例

       在下面的這個例子中,我們會使用HttpServletRequest類的getHeaderNames()方法來讀取HTTP信息頭。這個

方法以枚舉的形式返回當前HTTP請求的頭信息。

       獲取Enumeration對象后,用標准的方式來遍歷Enumeration對象,用hasMoreElements()方法來確定什么時候

停止,用nextElement()方法來獲得每個參數的名字。

       main.jsp源代碼為:

 

<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HTTP</title>
</head>
<body>
    <h1>HTTP頭部請求實例</h1>
    <hr>
    <table width="100%" border="1" align="center">
 <tr bgcolor="#949494">  <th>Header Name</th>  <th>Header Value(s)</th>  </tr>  <%  Enumeration headerNames = request.getHeaderNames();  while (headerNames.hasMoreElements()) {  String paramName = (String) headerNames.nextElement();  out.print("<tr><td>" + paramName + "</td>\n");  String paramValue = request.getHeader(paramName);  out.println("<td> " + paramValue + "</td></tr>\n");  }  %> </table> </body> </html>

       訪問main.jsp,將會得到以下結果:

  

二JSP服務器響應

       response響應對象主要將JSP容器處理后的結果傳回到客戶端。可以通過response變量設置HTTP的狀態和向客

戶端發送數據,如Cookie、HTTP文件頭信息等。

       一個典型的響應看起來就像下面這樣:

 

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (空行)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

       狀態行包含HTTP版本信息,比如HTTP/1.1,一個狀態碼,比如200,還有一個非常短的信息對應着狀態碼,比

如OK。

       下表摘要出了HTTP1.1響應頭中最有用的部分,在網絡編程中您將會經常見到它們:

 (1)HttpServletResponse類

       response對象是 javax.servlet.http.HttpServletResponse類的一個實例。就像服務器會創建request對象一樣,

它也會創建一個客戶端響應。

       response對象定義了處理創建HTTP信息頭的接口。通過使用這個對象,開發者們可以添加新的cookie或時間

戳,還有HTTP狀態碼等等。

      下表列出了用來設置HTTP響應頭的方法,這些方法由HttpServletResponse類提供:

 

 (2)HTTP響應頭程序示例

       接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來模擬一個數字時鍾:

       main1.jsp源代碼:

 

<%@page import="java.util.GregorianCalendar"%>
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HTTP</title>
</head>
<body>
    <h1>自動刷新實例</h1>
    <%
 //設置每隔5秒自動刷新  response.setIntHeader("Refresh", 5);  //獲取當前時間  Calendar calendar = new GregorianCalendar();  String am_pm;  int hour = calendar.get(Calendar.HOUR);  int minute = calendar.get(Calendar.MINUTE);  int second = calendar.get(Calendar.SECOND);  if (calendar.get(Calendar.AM_PM) == 0){}  am_pm = "AM";  else  am_pm = "PM";  String CT = hour + ":" + minute + ":" + second + " " + am_pm;  out.println("當前時間: " + CT + "\n");  %> </body> </html>

       將以上代碼保存為main1.jsp,然后通過瀏覽器訪問它。它將會每隔5秒顯示一下系統當前時間。      

 

 三HTTP狀態碼

 

       HTTP請求與HTTP響應的格式相近,都有着如下結構:

 

       1)以狀態行+CRLF(回車換行)開始

 

       2)零行或多行頭模塊+CRLF

 

       3)一個空行,比如CRLF

 

       4)可選的消息體比如文件,查詢數據,查詢輸出

 

       舉例來說,一個服務器響應頭看起來就像下面這樣:

 

 

 

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

 

       狀態行包含HTTP版本,一個狀態碼,和狀態碼相對應的短消息。

 

       下表列出了可能會從服務器返回的HTTP狀態碼和與之關聯的消息:

 (1)設置HTTP狀態碼的方法

      下表列出了HttpServletResponse類中用來設置狀態碼的方法:

 (2)HTTP狀態碼程序示例

       接下來的例子將會發送407錯誤碼給瀏覽器,然后瀏覽器將會告訴您"Need authentication!!!"。

       main2.jsp源代碼:

  

     訪問以上JSP頁面,將會得到以下結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM