HTTP与HttpServlet
Web瀏覽器和服務(wù)器通過HTTP協(xié)議在Internet上發(fā)送和接收消息。HTTP是一種基于請求/響應(yīng)模式的協(xié)議。客戶端發(fā)送一個請求,服務(wù)器端返回對該請求響應(yīng)。
HTTP使用可靠的TCP連接,默認(rèn)端口是80。
(2)、HTTP請求
HTTP請求由3個部分構(gòu)成,分別是:
l? 請求方法URI協(xié)議/版本
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協(xié)議/版本
以上代碼中“GET”代表請求方法,“/sample.jsp”表示URI,“HTTP/1.1”代表協(xié)議和協(xié)議的版本。
根據(jù)HTTP標(biāo)準(zhǔn),HTTP請求可以使用多種請求方法。例如:HTTP1.1支持7種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet應(yīng)用中,最常用的方法是GET和POST。
URL完整地指定了要訪問的網(wǎng)絡(luò)資源,通常只要給出相對于服務(wù)器的根目錄的相對目錄即可,因此總是以“/”開頭,最后,協(xié)議版本聲明了通信過程中使用HTTP的版本。
2>、請求頭(Request Header)
請求頭包含許多有關(guān)的客戶端環(huán)境和請求正文的有用信息。例如,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等。
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>、請求正文
請求頭和請求正文之間是一個空行,這個行非常重要,它表示請求頭已經(jīng)結(jié)束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:
username=rrrro&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內(nèi)容。當(dāng)然,在實際應(yīng)用中,HTTP請求正文可以包含更多的內(nèi)容。
HTTP響應(yīng)
?
與HTTP請求相似,HTTP響應(yīng)也由3個部分構(gòu)成,分別是:
l? 協(xié)議狀態(tài)版本代碼描述
l? 響應(yīng)頭(Response Header)
l? 響應(yīng)正文
下面是一個HTTP響應(yīng)的例子:
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響應(yīng)示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
1>、協(xié)議 狀態(tài)代碼描述
HTTP響應(yīng)的第一行類似于HTTP請求的第一行,它表示通信所用的協(xié)議是HTTP1.1服務(wù)器已經(jīng)成功的處理了客戶端發(fā)出的請求(200表示成功):
HTTP/1.1 200 OK
2>、響應(yīng)頭(Response Header)
響應(yīng)頭也和請求頭一樣包含許多有用的信息,例如服務(wù)器類型、日期時間、內(nèi)容類型和長度等:
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>、響應(yīng)正文
響應(yīng)正文就是服務(wù)器返回的HTML頁面:
<html>
<head>
<title>HTTP響應(yīng)示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
響應(yīng)頭和正文之間也必須用空行分隔。
(3)HTTPServlet的功能
在了解具體的HTTP協(xié)議規(guī)范后,可以更好地理解HttpServlet的作用,它能夠根據(jù)客戶發(fā)出HTTP請求,生成相應(yīng)的HTTP響應(yīng)結(jié)果。HttpServlet首先必須讀取HTTP請求的內(nèi)容。Servlet容器負(fù)責(zé)創(chuàng)建HttpRequest對象,并把HTTP請求信息封裝到HttpRequest對象中,這大大簡化了HttpServlet解析請求數(shù)據(jù)的工作量。如果沒有HttpRequest,HttpServlet只能直接處理Web客戶發(fā)出的原始的字符數(shù)據(jù),有了HttpRequest后,只要調(diào)用HttpServletRequest的相關(guān)方法,就可以方便地讀取HTTP請求中任何一部分信息,HttpServletRequest中讀取HTTP請求信息的常用方法參見下表
?
HttpServletRequest對象的常用方法
| 方法 | 描述 |
| getCookie() | 返回HTTP請求的Cookies |
| getHeader(String name) | 返回參數(shù)指定的HTTP請求的Header數(shù)據(jù) |
| getRequestURI() | 返回HTTP請求的URI |
| getQueryString() | 返回HTTP請求數(shù)據(jù)中的查詢字符串 |
| getMethod() | 返回HTTP請求方法 |
Servlet容器還向HttpServlet提供了HttpServletResponse對象,HttpServlet可以通過它來生成HTTP響應(yīng)的每一部分內(nèi)容,HttpServletResponse提供了生成響應(yīng)數(shù)據(jù)Header的方法
?
HttpServletResponse對象的常用方法
| 方法 | 描述 |
| addCookie(Cookie cookie) | 向HTTP響應(yīng)中加入Cookie |
| setHeader(String name,String value) | 設(shè)置HTTP響應(yīng)的Header,如果參數(shù)name對應(yīng)的Header已經(jīng)存在,則覆蓋原來的Header數(shù)據(jù) |
| addHeader(String name,String value) | 向HTTP響應(yīng)中加入Header |
?
(4)Servlet容器響應(yīng)Web客戶請求流程的UML時序圖
在時序圖中,從對象A到對象B的箭頭,表示A向B發(fā)送一條消息,B接收到消息后,將執(zhí)行相關(guān)的操作,因此也可理解為A調(diào)用B的方法。例如在UML時序圖步驟5,表示Servlet容器調(diào)用HttpServlet的service()方法,對于步驟2,箭頭的起點和終點都指向Servlet容器,表示Servlet容器調(diào)用自身的方法來解析HTTP請求信息。
1.????? Web客戶向Servlet容器發(fā)出HTTP請求;
2.????? Servlet容器解析Web的HTTP請求;
3.????? Servlet容器創(chuàng)建一個HttpRequest對象,在這個對象中封裝了HTTP請求信息;
4.????? Servlet容器創(chuàng)建一個HttpResponse對象;
5.????? Servlet容器調(diào)用HttpServlet的service方法,把HttpRequest和HttpResponse對象為Service方法的參數(shù)傳給HttpServlet對象;
6.????? HttpServlet調(diào)用HttpRequest的有關(guān)方法,獲取HTTP請求信息;
7.????? HttpServlet調(diào)用HttpResponse的有關(guān)方法,生成響應(yīng)數(shù)據(jù);
8.?????? Servlet容器把HttpServlet的響應(yīng)結(jié)果傳給Web客戶
--------------------
++轉(zhuǎn)載
轉(zhuǎn)載于:https://www.cnblogs.com/SamFlynn/p/4461463.html
總結(jié)
以上是生活随笔為你收集整理的HTTP与HttpServlet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MMIX机器简要介绍
- 下一篇: 2019牛客暑期多校训练营(第一场)E题