HTTP與HttpServlet


(1)、HTTP協議

Web瀏覽器和服務器通過HTTP協議在Internet上發送和接收消息。HTTP是一種基於請求/響應模式的協議。客戶端發送一個請求,服務器端返回對該請求響應。

HTTP使用可靠的TCP連接,默認端口是80

(2)、HTTP請求

HTTP請求由3個部分構成,分別是:

l  請求方法URI協議/版本

l  請求頭(Request Header)

l  請求正文

下面是一個HTTP請求的例子:

GET/sample.jspHTTP/1.1

 

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

 

username=ssss&password=1234

 

1>、請求方法URI協議/版本

以上代碼中“GET”代表請求方法,“/sample.jsp”表示URI,“HTTP/1.1”代表協議和協議的版本。

根據HTTP標准,HTTP請求可以使用多種請求方法。例如:HTTP1.1支持7種請求方法:GETPOSTHEADOPTIONSPUTDELETETARCE。在Internet應用中,最常用的方法是GETPOST

URL完整地指定了要訪問的網絡資源,通常只要給出相對於服務器的根目錄的相對目錄即可,因此總是以“/”開頭,最后,協議版本聲明了通信過程中使用HTTP的版本。

2>、請求頭(Request Header)

請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

3>、請求正文

請求頭和請求正文之間是一個空行,這個行非常重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:

username=rrrro&password=1234

在以上的例子的HTTP請求中,請求的正文只有一行內容。當然,在實際應用中,HTTP請求正文可以包含更多的內容。

HTTP響應

 

HTTP請求相似,HTTP響應也由3個部分構成,分別是:

l  協議狀態版本代碼描述

l  響應頭(Response Header)

l  響應正文

下面是一個HTTP響應的例子:

HTTP/1.1 200 OK

 

Server:Apache Tomcat/ 5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

 

<html>
<head>

<title>HTTP響應示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

1>、協議 狀態代碼描述

HTTP響應的第一行類似於HTTP請求的第一行,它表示通信所用的協議是HTTP1.1服務器已經成功的處理了客戶端發出的請求(200表示成功):

HTTP/1.1 200 OK

2>、響應頭(Response Header)

響應頭也和請求頭一樣包含許多有用的信息,例如服務器類型、日期時間、內容類型和長度等:

  Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

3>、響應正文

響應正文就是服務器返回的HTML頁面:

  <html>
<head>

<title>HTTP響應示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

響應頭和正文之間也必須用空行分隔。  

(3)HTTPServlet的功能

在了解具體的HTTP協議規范后,可以更好地理解HttpServlet的作用,它能夠根據客戶發出HTTP請求,生成相應的HTTP響應結果。HttpServlet首先必須讀取HTTP請求的內容。Servlet容器負責創建HttpRequest對象,並把HTTP請求信息封裝到HttpRequest對象中,這大大簡化了HttpServlet解析請求數據的工作量。如果沒有HttpRequest,HttpServlet只能直接處理Web客戶發出的原始的字符數據,有了HttpRequest后,只要調用HttpServletRequest的相關方法,就可以方便地讀取HTTP請求中任何一部分信息,HttpServletRequest中讀取HTTP請求信息的常用方法參見下表

 

HttpServletRequest對象的常用方法

方法

描述

getCookie()

返回HTTP請求的Cookies

getHeader(String name)

返回參數指定的HTTP請求的Header數據

getRequestURI()

返回HTTP請求的URI

getQueryString()

返回HTTP請求數據中的查詢字符串

getMethod()

返回HTTP請求方法

Servlet容器還向HttpServlet提供了HttpServletResponse對象,HttpServlet可以通過它來生成HTTP響應的每一部分內容,HttpServletResponse提供了生成響應數據Header的方法

 

HttpServletResponse對象的常用方法

方法

描述

addCookie(Cookie cookie)

HTTP響應中加入Cookie

setHeader(String name,String value)

設置HTTP響應的Header,如果參數name對應的Header已經存在,則覆蓋原來的Header數據

addHeader(String name,String value)

HTTP響應中加入Header

 

(4)Servlet容器響應Web客戶請求流程的UML時序圖

在時序圖中,從對象A到對象B的箭頭,表示AB發送一條消息,B接收到消息后,將執行相關的操作,因此也可理解為A調用B的方法。例如在UML時序圖步驟5,表示Servlet容器調用HttpServletservice()方法,對於步驟2,箭頭的起點和終點都指向Servlet容器,表示Servlet容器調用自身的方法來解析HTTP請求信息。

1.      Web客戶向Servlet容器發出HTTP請求;

2.      Servlet容器解析WebHTTP請求;

3.      Servlet容器創建一個HttpRequest對象,在這個對象中封裝了HTTP請求信息;

4.      Servlet容器創建一個HttpResponse對象;

5.      Servlet容器調用HttpServletservice方法,把HttpRequestHttpResponse對象為Service方法的參數傳給HttpServlet對象;

6.      HttpServlet調用HttpRequest的有關方法,獲取HTTP請求信息;

7.      HttpServlet調用HttpResponse的有關方法,生成響應數據;

8.       Servlet容器把HttpServlet的響應結果傳給Web客戶

--------------------

++轉載


免責聲明!

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



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