溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)

發(fā)布時間:2020-04-10 19:54:38 來源:網(wǎng)絡(luò) 閱讀:561 作者:匆匆的那年 欄目:開發(fā)技術(shù)
1、一個Servlet入門項目

使用STS4新建一個空的POM項目:

(1)創(chuàng)建包com.edison

(2)創(chuàng)建類ServletTest,繼承自HttpServlet,代碼如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

3)使用mvn compile編譯

4)到本項目的target目錄下

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)

拷貝classes目錄到tomcatwebapps\ROOT\WEB-INF目錄下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)

5)打開這個目錄下的web.xml,并增加如下幾行(陰影部分):

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

(6)tomcatbin目錄下,執(zhí)行startup.bat

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

(7)使用瀏覽器測試:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

2、Servlet架構(gòu)和依賴環(huán)境

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Java Servlet 是運行在 HTTP Server或應(yīng)用服務(wù)器(例如:Tomcat上的程序,它是作為來自 Web browser HTTP server應(yīng)用程序之間的中間層。

Servlet收集來自網(wǎng)頁表單的用戶輸入,呈現(xiàn)來自數(shù)據(jù)庫或者其他源的記錄,還可以動態(tài)創(chuàng)建網(wǎng)頁,這些功能和?CGICommon Gateway Interface,公共網(wǎng)關(guān)接口)程序相同。

相比于 CGIServlet更容易開發(fā),還有如下特點:

l?Servlet Web 服務(wù)器的地址空間內(nèi)執(zhí)行。

l?Servlet Java 編寫。

l?Java 安全管理器能保護Servlet。

l?Java 類庫能支撐?Servlet。

?

JAVA Web開發(fā)框架大部分都是建立在Servlet基礎(chǔ)之上的,比如StructsSpring MVC,前者的ActionServlet和后者的DispatcherServletServlet。

Servlet是處理web請求的基本單元,而Filter則是圍繞著Servlet,用于在web請求被處理之前或者之后對web請求(Request)和應(yīng)答(Response)修改,Filter工作機制如下圖:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Servlet Filter 具有如下特點:

l?Filter可以作用于Servlet之前、又可以作用于Servlet之后。Spring Security作用于Servlet之前

l?FilterRequest到達Servlet之前,可以直接將Response返回,此功能用于諸如在未登錄的情況下直接向用戶展示登錄頁面這樣的功能。

l?多個Filter起作用時有先后順序。

?

Servlet依賴環(huán)境包括Web服務(wù)器(應(yīng)用服務(wù)器、容器)、servlet規(guī)范、JSP規(guī)范。

Java Servlet 運行在帶有支持 Java Servlet 規(guī)范的Web服務(wù)器或者容器上,而Tomcat就是一種支持servlet容器功能的應(yīng)用服務(wù)器

Servlet需要?javax.servlet??javax.servlet.http?支持。

Servlet必須符合Java Servlet 規(guī)范 JSP 規(guī)范,不同容器實現(xiàn)的規(guī)范版本不同。

3、Servlet主要功能和生命周期

Servlet用于替代CGI,因此具有CGI類似的功能:

l?獲取瀏覽器上傳的用戶數(shù)據(jù),例如網(wǎng)頁上的 HTML 表單(也可以是來自 applet 或自定義的 HTTP 客戶端程序的表單)。

l?獲取瀏覽器上傳的HTTP請求數(shù)據(jù)包括 cookies、媒體類型和瀏覽器能理解的壓縮格式等等。

l?處理這些上行數(shù)據(jù)并生成結(jié)果,包括訪問數(shù)據(jù)庫,執(zhí)行 RMI CORBA 調(diào)用,調(diào)用 Web 服務(wù)。

l?下發(fā)用戶響應(yīng)數(shù)據(jù)到瀏覽器,例如文本文件(HTML 、XML、JSON)、圖片、流媒體等。

l?下發(fā)?HTTP響應(yīng)數(shù)據(jù)到瀏覽器,包括返回文檔類型(例如 HTML),設(shè)置 cookies 和緩存參數(shù),以及其他類似的任務(wù)。

?

Servlet 生命周期從創(chuàng)建直到毀滅的整個過程,過程包括:

l?init ()?方法初始化,只調(diào)用一次。

l?service()?方法處理客戶端的請求,每收到一次請求,服務(wù)器新產(chǎn)生一個線程來處理。

l?destroy()?方法: 終止,只調(diào)用一次。

l?垃圾回收:JVM 的垃圾回收器負責(zé)最后的垃圾回收。

生命周期示意圖如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

service()?方法可以調(diào)用的HTTP請求方法:

l?doGet() 方法

對應(yīng)HTTP GET 請求來自于一個 URL 的正常請求,或者來自于一個未指定 METHOD HTML 表單

public void doGet(HttpServletRequest request,

??????????????????HttpServletResponse response)

????throws ServletException, IOException {

????// Servlet 代碼}

l?doPost() 方法

對應(yīng)HTTP POST 請求,來自于一個特別指定了 METHOD POST HTML 表單

public void doPost(HttpServletRequest request,

???????????????????HttpServletResponse response)

????throws ServletException, IOException {

????// Servlet 代碼}

?

4、HTTPHTTPS協(xié)議介紹

HTTPHyperText?Transfer?Protocol超文本傳輸協(xié)議),是WWWWorld Wide Web,萬維網(wǎng))的傳輸協(xié)議,是TCP/IP模型的應(yīng)用層協(xié)議,負責(zé)Web瀏覽器和Web服務(wù)器之間傳輸超文本信息(Hypertext),超文本信息可以描述超媒體(?Hypermedia),而超媒體包括文本、圖形、視頻、音頻等多媒體(Multimedia)信息,這些信息以web頁面(Web Page)為單位,他們之間通過超鏈接(Hyperlink)相互連接。

HTTP協(xié)議采用了請求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?HTTP1.0采用普通交互流程,多次交互才能完成信息傳輸,如下

1Web瀏覽器連接到Web服務(wù)器
Web瀏覽器Web服務(wù)器的HTTP端口(默認為80)建立一個TCP套接字連接。

2發(fā)送HTTP請求
通過TCP套接字,Web瀏覽器Web服務(wù)器發(fā)送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數(shù)據(jù)組成。

3Web服務(wù)器接受請求并返回HTTP響應(yīng)
Web服務(wù)器解析請求,定位請求資源。Web服務(wù)器將資源復(fù)本寫到TCP套接字,由Web瀏覽器讀取。一個響應(yīng)由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成。

4釋放連接TCP連接
連接模式為close,則Web服務(wù)器主動關(guān)閉TCP連接,Web瀏覽器釋放TCP連接;連接模式為keepalive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求;

5Web瀏覽器解析HTML內(nèi)容
Web瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集。Web瀏覽器讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在Web瀏覽器窗口中顯示。

?

HTTP1.1采用持久連接(HTTP Persistent Connections),也稱為 HTTP keep-alive HTTP connection reuse,只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態(tài),其交互流程如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

上圖的“客戶端”實際上就是Web瀏覽器,或者定制的特殊Web瀏覽器,上圖的“服務(wù)器”就是Web服務(wù)器,“建立TCP連接”包括三個子步驟,“斷開TCP連接”包括四個子步驟。

持久連接使得多數(shù)請求以管線化(pipelining)方式發(fā)送成為可能,HTTP1.1支持管線化傳輸。管線化技術(shù)支持并行發(fā)送多個請求。如下圖:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

HTTPSHTTP基礎(chǔ)上增加了數(shù)字簽名和非對稱加解密功能,其交互圖如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

HTTP報文包括請求報文和響應(yīng)報文兩大部分,其中請求報文由請求行(request line)、請求頭(header)、空行和請求體四個部分組成。而響應(yīng)報文由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)體四個部分組成。下圖是一個具體HTTP報文例子:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

HTTP請求類型包括:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

HTTP狀態(tài)碼包括:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

代碼

消息

描述

100

Continue

只有請求的一部分已經(jīng)被服務(wù)器接收,但只要它沒有被拒絕,客戶端應(yīng)繼續(xù)該請求。

101

Switching Protocols

服務(wù)器切換協(xié)議。

200

OK

請求成功。

201

Created

該請求是完整的,并創(chuàng)建一個新的資源。

202

Accepted

該請求被接受處理,但是該處理是不完整的。

203

Non-authoritative Information


204

No Content


205

Reset Content


206

Partial Content


300

Multiple Choices

鏈接列表。用戶可以選擇一個鏈接,進入到該位置。最多五個地址。

301

Moved Permanently

所請求的頁面已經(jīng)轉(zhuǎn)移到一個新的 URL。

302

Found

所請求的頁面已經(jīng)臨時轉(zhuǎn)移到一個新的 URL。

303

See Other

所請求的頁面可以在另一個不同的 URL 下被找到。

304

Not Modified


305

Use Proxy


306

Unused

在以前的版本中使用該代碼?,F(xiàn)在已不再使用它,但代碼仍被保留。

307

Temporary Redirect

所請求的頁面已經(jīng)臨時轉(zhuǎn)移到一個新的 URL。

400

Bad Request

服務(wù)器不理解請求。

401

Unauthorized

所請求的頁面需要用戶名和密碼。

402

Payment Required

您還不能使用該代碼。

403

Forbidden

禁止訪問所請求的頁面。

404

Not Found

服務(wù)器無法找到所請求的頁面。.

405

Method Not Allowed

在請求中指定的方法是不允許的。

406

Not Acceptable

服務(wù)器只生成一個不被客戶端接受的響應(yīng)。

407

Proxy Authentication Required

在請求送達之前,您必須使用代理服務(wù)器的驗證。

408

Request Timeout

請求需要的時間比服務(wù)器能夠等待的時間長,超時。

409

Conflict

請求因為沖突無法完成。

410

Gone

所請求的頁面不再可用。

411

Length Required

"Content-Length" 未定義。服務(wù)器無法處理客戶端發(fā)送的不帶 Content-Length 的請求信息。

412

Precondition Failed

請求中給出的先決條件被服務(wù)器評估為 false。

413

Request Entity Too Large

服務(wù)器不接受該請求,因為請求實體過大。

414

Request-url Too Long

服務(wù)器不接受該請求,因為 URL 太長。當(dāng)您轉(zhuǎn)換一個 "post" 請求為一個帶有長的查詢信息的 "get" 請求時發(fā)生。

415

Unsupported Media Type

服務(wù)器不接受該請求,因為媒體類型不被支持。

417

Expectation Failed


500

Internal Server Error

未完成的請求。服務(wù)器遇到了一個意外的情況。

501

Not Implemented

未完成的請求。服務(wù)器不支持所需的功能。

502

Bad Gateway

未完成的請求。服務(wù)器從上游服務(wù)器收到無效響應(yīng)。

503

Service Unavailable

未完成的請求。服務(wù)器暫時超載或死機。

504

Gateway Timeout

網(wǎng)關(guān)超時。

505

HTTP Version Not Supported

服務(wù)器不支持"HTTP協(xié)議"版本。

HTTP/1.1種規(guī)定了47種首部字段(圖表參考《圖解HTTP》)

1通用首部字段

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

2請求首部字段

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

3響應(yīng)首部字段

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

4實體首部字段

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

5其他首部字段

CookieSet-Cookie、Content-Disposition、Connection、Keep-Alive、Proxy-Authenticate、Proxy-AuthorizationTrailer、TE、Transfer-Encoding、Upgrade etc...

?

5、在Java EE中測試Servlet

這里提供GETPOST表單請求的例子,步驟如下:

(1)新建web項目

使用STS4創(chuàng)建Dynamic Web新項目:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

下一步如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

New Runtime”:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

選擇Tomcat7,然后Next,再點擊Browse選擇tomcat安裝目錄:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

選擇目錄后回到先前的界面,然后再選擇JRE

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

然后選擇兩次Next,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

finish。到左邊的Project Explorer

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

選中src,右鍵菜單new-->servlet,進入如下界面:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

填寫包和類名后,兩次next后:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Finish。生成TestPostMethod.java文件,內(nèi)容如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

修改doGet,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

修改doPost,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Project Explorerweb content目錄下新建目錄:HTML。然后,選中HTML,右鍵菜單new-->html file,彈出“New HTML File”窗口,在File Name中填寫:index.htm,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Finish。Index.html代碼如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

修改為:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

選中WEB-INF目錄,右鍵菜單new-->

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Next,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

File Name中,輸入web.xml,點FinishWeb.xml內(nèi)容為:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

修改為:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)

?

(2)構(gòu)建和測試

選中項目,右鍵菜單Run As-->Run on Server:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

Finish

?

這時候,STS4在右上角自動顯示首頁:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

在上面輸入:googlewww.google.com,點提交:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

返回后再下面選中物理,點“選擇學(xué)科”:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

過程中遇到一個問題:

[SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TestPost' did not find a matching property.

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

解決:在STS4的右下角,選中Server,再選中Tomcat,如下圖:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

然后,右鍵菜單Open,在右上角窗口,把“Publish module contexts to separate XML files”打鉤,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

關(guān)閉并保存。

?

6、Servlet請求

Servlet請求類是javax.servlet.http.HttpServletRequest。

每當(dāng)Web瀏覽器請求一個頁面時,Web服務(wù)器就會產(chǎn)生一個新的request對象來代表這個請求。?request對象提供了一系列方法來獲取HTTP請求頭,包括表單數(shù)據(jù),cookiesHTTP方法等等。

常用的HTTP請求頭如下:

頭信息

描述

Accept

這個頭信息指定瀏覽器或其他客戶端可以處理的 MIME 類型。值?image/png?或?image/jpeg?是最常見的兩種可能值。

Accept-Charset

這個頭信息指定瀏覽器可以用來顯示信息的字符集。例如 ISO-8859-1。

Accept-Encoding

這個頭信息指定瀏覽器知道如何處理的編碼類型。值?gzip?或?compress?是最常見的兩種可能值。

Accept-Language

這個頭信息指定客戶端的首選語言,在這種情況下,Servlet 會產(chǎn)生多種語言的結(jié)果。例如,en、en-us、ru 等。

Authorization

這個頭信息用于客戶端在訪問受密碼保護的網(wǎng)頁時識別自己的身份。

Connection

這個頭信息指示客戶端是否可以處理持久 HTTP 連接。持久連接允許客戶端或其他瀏覽器通過單個請求來檢索多個文件。值?Keep-Alive?意味著使用了持續(xù)連接。

Content-Length

這個頭信息只適用于 POST 請求,并給出 POST 數(shù)據(jù)的大?。ㄒ宰止?jié)為單位)。

Cookie

這個頭信息把之前發(fā)送到瀏覽器的 cookies 返回到服務(wù)器。

Host

這個頭信息指定原始的 URL 中的主機和端口。

If-Modified-Since

這個頭信息表示只有當(dāng)頁面在指定的日期后已更改時,客戶端想要的頁面。如果沒有新的結(jié)果可以使用,服務(wù)器會發(fā)送一個 304 代碼,表示?Not Modified?頭信息。

If-Unmodified-Since

這個頭信息是 If-Modified-Since 的對立面,它指定只有當(dāng)文檔早于指定日期時,操作才會成功。

Referer

這個頭信息指示所指向的 Web 頁的 URL。例如,如果您在網(wǎng)頁 1,點擊一個鏈接到網(wǎng)頁 2,當(dāng)瀏覽器請求網(wǎng)頁 2 時,網(wǎng)頁 1 的 URL 就會包含在 Referer 頭信息中。

User-Agent

這個頭信息識別發(fā)出請求的瀏覽器或其他客戶端,并可以向不同類型的瀏覽器返回不同的內(nèi)容。

?

Servlet請求類詳細情況如下:

序號

方法 & 描述

1

Cookie[] getCookies()
返回一個數(shù)組,包含客戶端發(fā)送該請求的所有的 Cookie 對象。

2

Enumeration getAttributeNames()
返回一個枚舉,包含提供給該請求可用的屬性名稱。

3

Enumeration getHeaderNames()
返回一個枚舉,包含在該請求中包含的所有的頭名。

4

Enumeration getParameterNames()
返回一個 String 對象的枚舉,包含在該請求中包含的參數(shù)的名稱。

5

HttpSession getSession()
返回與該請求關(guān)聯(lián)的當(dāng)前 session 會話,或者如果請求沒有 session 會話,則創(chuàng)建一個。

6

HttpSession getSession(boolean create)
返回與該請求關(guān)聯(lián)的當(dāng)前 HttpSession,或者如果沒有當(dāng)前會話,且創(chuàng)建是真的,則返回一個新的 session 會話。

7

Locale getLocale()
基于 Accept-Language 頭,返回客戶端接受內(nèi)容的首選的區(qū)域設(shè)置。

8

Object getAttribute(String name)
以對象形式返回已命名屬性的值,如果沒有給定名稱的屬性存在,則返回 null。

9

ServletInputStream getInputStream()
使用 ServletInputStream,以二進制數(shù)據(jù)形式檢索請求的主體。

10

String getAuthType()
返回用于保護 Servlet 的身份驗證方案的名稱,例如,"BASIC" 或 "SSL",如果JSP沒有受到保護則返回 null。

11

String getCharacterEncoding()
返回請求主體中使用的字符編碼的名稱。

12

String getContentType()
返回請求主體的 MIME 類型,如果不知道類型則返回 null。

13

String getContextPath()
返回指示請求上下文的請求 URI 部分。

14

String getHeader(String name)
以字符串形式返回指定的請求頭的值。

15

String getMethod()
返回請求的 HTTP 方法的名稱,例如,GET、POST 或 PUT。

16

String getParameter(String name)
以字符串形式返回請求參數(shù)的值,或者如果參數(shù)不存在則返回 null。

17

String getPathInfo()
當(dāng)請求發(fā)出時,返回與客戶端發(fā)送的 URL 相關(guān)的任何額外的路徑信息。

18

String getProtocol()
返回請求協(xié)議的名稱和版本。

19

String getQueryString()
返回包含在路徑后的請求 URL 中的查詢字符串。

20

String getRemoteAddr()
返回發(fā)送請求的客戶端的互聯(lián)網(wǎng)協(xié)議(IP)地址。

21

String getRemoteHost()
返回發(fā)送請求的客戶端的完全限定名稱。

22

String getRemoteUser()
如果用戶已通過身份驗證,則返回發(fā)出請求的登錄用戶,或者如果用戶未通過身份驗證,則返回 null。

23

String getRequestURI()
從協(xié)議名稱直到 HTTP 請求的第一行的查詢字符串中,返回該請求的 URL 的一部分。

24

String getRequestedSessionId()
返回由客戶端指定的 session 會話 ID。

25

String getServletPath()
返回調(diào)用 JSP 的請求的 URL 的一部分。

26

String[] getParameterValues(String name)
返回一個字符串對象的數(shù)組,包含所有給定的請求參數(shù)的值,如果參數(shù)不存在則返回 null。

27

boolean isSecure()
返回一個布爾值,指示請求是否使用安全通道,如 HTTPS。

28

int getContentLength()
以字節(jié)為單位返回請求主體的長度,并提供輸入流,或者如果長度未知則返回 -1。

29

int getIntHeader(String name)
返回指定的請求頭的值為一個 int 值。

30

int getServerPort()
返回接收到這個請求的端口號。

31

int getParameterMap()
將參數(shù)封裝成 Map 類型。

?

?

修改前面的servlet入門項目”,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

測試:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

7、Servlet應(yīng)答

?Web服務(wù)器處理Servlet請求后向Web瀏覽器發(fā)送Servlet應(yīng)答消息,設(shè)置HTTP狀態(tài)和向WEB瀏覽器發(fā)送數(shù)據(jù),如Cookie、HTTP文件頭信息等。

常用的應(yīng)答頭信息如下:

頭信息

描述

Allow

這個頭信息指定服務(wù)器支持的請求方法(GET、POST 等)。

Cache-Control

這個頭信息指定響應(yīng)文檔在何種情況下可以安全地緩存??赡艿闹涤校?/span>public、private?或?no-cache?等。Public 意味著文檔是可緩存,Private 意味著文檔是單個用戶私用文檔,且只能存儲在私有(非共享)緩存中,no-cache 意味著文檔不應(yīng)被緩存。

Connection

這個頭信息指示瀏覽器是否使用持久 HTTP 連接。值?close?指示瀏覽器不使用持久 HTTP 連接,值?keep-alive?意味著使用持久連接。

Content-Disposition

這個頭信息可以讓您請求瀏覽器要求用戶以給定名稱的文件把響應(yīng)保存到磁盤。

Content-Encoding

在傳輸過程中,這個頭信息指定頁面的編碼方式。

Content-Language

這個頭信息表示文檔編寫所使用的語言。例如,en、en-us、ru 等。

Content-Length

這個頭信息指示響應(yīng)中的字節(jié)數(shù)。只有當(dāng)瀏覽器使用持久(keep-alive)HTTP 連接時才需要這些信息。

Content-Type

這個頭信息提供了響應(yīng)文檔的 MIME(Multipurpose Internet Mail Extension)類型。

Expires

這個頭信息指定內(nèi)容過期的時間,在這之后內(nèi)容不再被緩存。

Last-Modified

這個頭信息指示文檔的最后修改時間。然后,客戶端可以緩存文件,并在以后的請求中通過?If-Modified-Since?請求頭信息提供一個日期。

Location

這個頭信息應(yīng)被包含在所有的帶有狀態(tài)碼的響應(yīng)中。在 300s 內(nèi),這會通知瀏覽器文檔的地址。瀏覽器會自動重新連接到這個位置,并獲取新的文檔。

Refresh

這個頭信息指定瀏覽器應(yīng)該如何盡快請求更新的頁面。您可以指定頁面刷新的秒數(shù)。

Retry-After

這個頭信息可以與 503(Service Unavailable 服務(wù)不可用)響應(yīng)配合使用,這會告訴客戶端多久就可以重復(fù)它的請求。

Set-Cookie

這個頭信息指定一個與頁面關(guān)聯(lián)的 cookie。

?

Servlet應(yīng)答類是javax.servlet.http.HttpServletResponse類,而Response對象是HTTP應(yīng)答類的一個實例。Web服務(wù)器處理Request對象后會創(chuàng)建Response對象。

Response對象定義了處理創(chuàng)建HTTP信息頭的接口。通過這個對象處理cookie,時間戳,HTTP狀態(tài)碼等等。

HTTP應(yīng)答類的詳細情況如下:

序號

方法 & 描述

1

String encodeRedirectURL(String url)
為 sendRedirect 方法中使用的指定的 URL 進行編碼,或者如果編碼不是必需的,則返回 URL 未改變。

2

String encodeURL(String url)
對包含 session 會話 ID 的指定 URL 進行編碼,或者如果編碼不是必需的,則返回 URL 未改變。

3

boolean containsHeader(String name)
返回一個布爾值,指示是否已經(jīng)設(shè)置已命名的響應(yīng)報頭。

4

boolean isCommitted()
返回一個布爾值,指示響應(yīng)是否已經(jīng)提交。

5

void addCookie(Cookie cookie)
把指定的 cookie 添加到響應(yīng)。

6

void addDateHeader(String name, long date)
添加一個帶有給定的名稱和日期值的響應(yīng)報頭。

7

void addHeader(String name, String value)
添加一個帶有給定的名稱和值的響應(yīng)報頭。

8

void addIntHeader(String name, int value)
添加一個帶有給定的名稱和整數(shù)值的響應(yīng)報頭。

9

void flushBuffer()
強制任何在緩沖區(qū)中的內(nèi)容被寫入到客戶端。

10

void reset()
清除緩沖區(qū)中存在的任何數(shù)據(jù),包括狀態(tài)碼和頭。

11

void resetBuffer()
清除響應(yīng)中基礎(chǔ)緩沖區(qū)的內(nèi)容,不清除狀態(tài)碼和頭。

12

void sendError(int sc)
使用指定的狀態(tài)碼發(fā)送錯誤響應(yīng)到客戶端,并清除緩沖區(qū)。

13

void sendError(int sc, String msg)
使用指定的狀態(tài)發(fā)送錯誤響應(yīng)到客戶端。

14

void sendRedirect(String location)
使用指定的重定向位置 URL 發(fā)送臨時重定向響應(yīng)到客戶端。

15

void setBufferSize(int size)
為響應(yīng)主體設(shè)置首選的緩沖區(qū)大小。

16

void setCharacterEncoding(String charset)
設(shè)置被發(fā)送到客戶端的響應(yīng)的字符編碼(MIME 字符集)例如,UTF-8。

17

void setContentLength(int len)
設(shè)置在 HTTP Servlet 響應(yīng)中的內(nèi)容主體的長度,該方法設(shè)置 HTTP Content-Length 頭。

18

void setContentType(String type)
如果響應(yīng)還未被提交,設(shè)置被發(fā)送到客戶端的響應(yīng)的內(nèi)容類型。

19

void setDateHeader(String name, long date)
設(shè)置一個帶有給定的名稱和日期值的響應(yīng)報頭。

20

void setHeader(String name, String value)
設(shè)置一個帶有給定的名稱和值的響應(yīng)報頭。

21

void setIntHeader(String name, int value)
設(shè)置一個帶有給定的名稱和整數(shù)值的響應(yīng)報頭。

22

void setLocale(Locale loc)
如果響應(yīng)還未被提交,設(shè)置響應(yīng)的區(qū)域。

23

void setStatus(int sc)
為該響應(yīng)設(shè)置狀態(tài)碼。

?

修改前面的servlet入門項目”,如下:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?

?

測試:

重溫Servlet,為Spring Framework和Spring BOOT之基礎(chǔ)?


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI