Java-Web程序設計任務教程第4章-請求和響課件_第1頁
Java-Web程序設計任務教程第4章-請求和響課件_第2頁
Java-Web程序設計任務教程第4章-請求和響課件_第3頁
Java-Web程序設計任務教程第4章-請求和響課件_第4頁
Java-Web程序設計任務教程第4章-請求和響課件_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第四章請求和響應請求重定向請求消息頭的獲取解決請求參數(shù)中的中文亂碼問題請求包含請求行消息的獲取請求參數(shù)的獲取請求轉發(fā)第四章請求和響應請求重定向請求行消息的獲取4掌握如何實現(xiàn)請求轉發(fā)與請求重定向3掌握如何解決請求和響應過程中的中文亂碼問題掌握掌握掌握掌握掌握HttpServletRequest對象及其應用1掌握HttpServletRequest對象及其應用2學習目標4掌握如何實現(xiàn)3掌握如何解決請求掌握掌握掌握掌握4.1HttpServletResponse對象4.2HttpServletResponse應用4.3HttpServletRequest對象4.4HttpServletRequest應用4.5RequestDispatcher對象的應用?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構目錄4.1HttpServletResponse對象4.2Htt返回目錄.24.1.3發(fā)送狀態(tài)碼相關的方法發(fā)送響應消息頭相關的方法發(fā)送響應消息體相關的方法4.1HttpServletResponse對象知識架構返回目錄.24.1.3發(fā)送狀態(tài)碼相關的方法發(fā)返回目錄4.2.1【任務4-1】解決中文輸出亂碼問題【任務4-2】實現(xiàn)網(wǎng)頁定時刷新并跳轉實現(xiàn)請求重定向4.2HttpServletResponse應用知識架構返回目錄4.2.1【任務4-1】解決中文輸出亂碼問題【任務4返回目錄4.3.1獲取請求行消息的相關方法獲取請求消息頭的相關方法4.3HttpServletRequest對象4.3.2知識架構返回目錄4.3.1獲取請求行消息的相關方法獲取請求消息頭的相返回目錄.2獲取請求參數(shù)【任務4-3】解決請求參數(shù)的中文亂碼問題通過Request對象傳遞數(shù)據(jù)4.4HttpServletRequest應用知識架構返回目錄.2獲取請求參數(shù)【任務4-3】解決請返回目錄.3RequestDispatcher接口請求轉發(fā)請求包含4.5RequestDispatcher對象的應用4.5.2知識架構返回目錄.3RequestDispatcheServlet最主要的作用就是處理客戶端請求,并向客戶端做出響應。為此,針對Servlet的每次請求,Web服務器在調(diào)用service()方法之前,都會創(chuàng)建兩個對象,分別是HttpServletRequest和HttpServletResponse。其中,HttpServletRequest用于封裝HTTP請求消息,簡稱request對象。HttpServletResponse用于封裝HTTP響應消息,簡稱response對象。request對象和response對象在請求Servlet過程中至關重要,接下來,通過一張圖來描述瀏覽器訪問Servlet的交互過程,如圖所示。請求和響應Servlet最主要的作用就是處理客戶端請求,并向客戶端做出需要注意的是,在Web服務器運行階段,每個Servlet都只會創(chuàng)建一個實例對象。然而,每次HTTP請求,Web服務器都會調(diào)用所請求Servlet實例的service(HttpServletRequestrequest,HttpServletResponseresponse)方法,重新創(chuàng)建一個request對象和一個response對象。接下來,本章將針對request對象和response對象進行詳細地講解。請求和響應請求和響應在ServletAPI中,定義了一個HttpServletResponse接口,它繼承自ServletResponse接口,專門用來封裝HTTP響應消息。由于HTTP響應消息分為狀態(tài)行、響應消息頭、消息體三部分,因此,在HttpServletResponse接口中定義了向客戶端發(fā)送響應狀態(tài)碼、響應消息頭、響應消息體的方法,接下來,本節(jié)將針對這些方法進行詳細的講解。4.1HttpServletResponse對象在ServletAPI中,定義了一個HttpServlet當Servlet向客戶端回送響應消息時,需要在響應消息中設置狀態(tài)碼。為此,在HttpServletResponse接口中,定義了兩個發(fā)送狀態(tài)碼的方法,具體如下。1.setStatus(intstatus)方法該方法用于設置HTTP響應消息的狀態(tài)碼,并生成響應狀態(tài)行。由于響應狀態(tài)行中的狀態(tài)描述信息直接與狀態(tài)碼相關,而HTTP版本由服務器確定,因此,只要通過setStatus(intstatus)方法設置了狀態(tài)碼,即可實現(xiàn)狀態(tài)行的發(fā)送。需要注意的是,正常情況下,Web服務器會默認產(chǎn)生一個狀態(tài)碼為200的狀態(tài)行。發(fā)送狀態(tài)碼相關的方法4.1HttpServletResponse對象當Servlet向客戶端回送響應消息時,需要在響應消息中設置2.sendError(intsc)方法該方法用于發(fā)送表示錯誤信息的狀態(tài)碼,例如,404狀態(tài)碼表示找不到客戶端請求的資源。在response對象中,提供了兩個重載的sendError(intsc)方法,具體如下:在上面重載的兩個方法中,第一個方法只是發(fā)送錯誤信息的狀態(tài)碼,而第二個方法除了發(fā)送狀態(tài)碼外,還可以增加一條用于提示說明的文本信息,該文本信息將出現(xiàn)在發(fā)送給客戶端的正文內(nèi)容中。4.1HttpServletResponse對象2.sendError(intsc)方法4.1HttpS當Servlet向客戶端發(fā)送響應消息時,由于HTTP協(xié)議的響應頭字段有很多種,為此,在HttpServletResponse接口中,定義了一系列設置HTTP響應頭字段的方法,如表所示。發(fā)送響應消息頭相關方法4.1HttpServletResponse對象當Servlet向客戶端發(fā)送響應消息時,由于HTTP協(xié)議的響由于在HTTP響應消息中,大量的數(shù)據(jù)都是通過響應消息體傳遞的,因此,ServletResponse遵循以IO流傳遞大量數(shù)據(jù)的設計理念。在發(fā)送響應消息體時,定義了兩個與輸出流相關的方法,具體如下。1.getOutputStream()方法該方法所獲取的字節(jié)輸出流對象為ServletOutputStream類型。由于ServletOutputStream是OutputStream的子類,它可以直接輸出字節(jié)數(shù)組中的二進制數(shù)據(jù)。因此,要想輸出二進制格式的響應正文,就需要使用getOutputStream()方法。發(fā)送響應消息頭相關方法4.1HttpServletResponse對象由于在HTTP響應消息中,大量的數(shù)據(jù)都是通過響應消息體傳遞的2.getWriter()方法該方法所獲取的字符輸出流對象為PrintWriter類型。由于PrintWriter類型的對象可以直接輸出字符文本內(nèi)容,因此,要想輸出內(nèi)容全為字符文本的網(wǎng)頁文檔,需要使用getWriter()方法。

了解了response對象發(fā)送響應消息體的兩個方法后,接下來,通過一個案例來學習這兩個方法的使用,請查看教材文件4-1。

接下來,對文件4-1進行修改,使用getWriter()方法發(fā)送消息體,請查看教材文件4-2。案例代碼4.1HttpServletResponse對象2.getWriter()方法了解了respo注意:雖然response對象的getOutputStream()和getWriter()方法都可以發(fā)送響應消息體,但是,它們之間互相排斥,不可同時使用,否則會發(fā)生IllegalStateException異常,如圖所示。圖中發(fā)生異常的原因就是在Servlet中,調(diào)用response.getWriter()方法之前已經(jīng)調(diào)用了response.getOutputStream()方法。4.1HttpServletResponse對象注意:4.1HttpServletResponse對象任務案例案例代碼接下來,通過解決中文輸出亂碼問題來熟悉本階段的知識點,請查看教材【任務4-1】?!救蝿?-1】解決中文輸出亂碼問題任務案例案例代碼接下來,通過解決中文輸出亂碼問題來熟任務案例案例代碼接下來,通過實現(xiàn)網(wǎng)頁定時刷新并跳轉來熟悉本階段的知識點,請查看教材【任務4-2】?!救蝿?-2】實現(xiàn)網(wǎng)頁定時刷新并跳轉任務案例案例代碼接下來,通過實現(xiàn)網(wǎng)頁定時刷新并跳轉來在某些情況下,針對客戶端的請求,一個Servlet類可能無法完成全部工作。這時,可以使用請求重定向來完成。所謂請求重定向,指的是Web服務器接收到客戶端的請求后,可能由于某些條件限制,不能訪問當前請求URL所指向的Web資源,而是指定了一個新的資源路徑,讓客戶端重新發(fā)送請求。為了實現(xiàn)請求重定向,在HttpServletResponse接口中,定義了一個sendRedirect()方法,該方法用于生成302響應碼和Location響應頭,從而通知客戶端重新訪問Location響應頭中指定的URL,sendRedirect()方法的完整語法如下所示:實現(xiàn)請求重定向4.2HttpServletResponse應用在某些情況下,針對客戶端的請求,一個Servlet類可能無法需要注意的是,參數(shù)location可以使用相對URL,Web服務器會自動將相對URL翻譯成絕對URL,再生成Location頭字段。為了使讀者更好地了解sendRedirect()方法如何實現(xiàn)請求重定向,接下來,通過一個圖來描述sendRedirect()方法的工作原理,如圖所示。在圖中,當客戶端訪問Servlet1時

,

由于在Servlet1中調(diào)用了sendRedirect()

方法將請求重定向到Servlet2,因此,Web服務器在收到Servlet1的響應消息

后,立刻向Servlet2發(fā)送請求。Servlet2對請求處理完畢后,再將響應消息回

送給客戶端。4.2HttpServletResponse應用需要注意的是,參數(shù)location可以使用相對URL,Web

了解了sendRedirect()方法的工作原理后,接下來,通過一個用戶登錄的案例,分步驟講解sendRedirect()方法的使用,請查看教材4.2.1小節(jié)。案例代碼4.2HttpServletResponse應用了解了sendRedirect()方法的工作原在ServletAPI中,定義了一個HttpServletRequest接口,它繼承自ServletRequest接口,專門用來封裝HTTP請求消息。由于HTTP請求消息分為請求行、請求消息頭和請求消息體三部分,因此,在HttpServletRequest接口中定義了獲取請求行、請求頭和請求消息體的相關方法,接下來,本節(jié)將針對這些方法進行詳細地講解。4.3HttpServletRequest對象在ServletAPI中,定義了一個HttpServlet當訪問Servlet時,會在請求消息的請求行中,包含請求方法、請求資源名、請求路徑等信息,為了獲取這些信息,在HttpServletRequest接口中,定義了一系列用于獲取請求行的方法,如表所示。獲取請求行信息的相關信息4.3HttpServletRequest對象當訪問Servlet時,會在請求消息的請求行中,包含請求方法

在表中,列出了一系列用于獲取請求消息行信息的方法,為了使讀者更好地理解這些方法,接下來,通過一個案例來演示這些方法的使用,請查看教材文件4-10。案例代碼4.3HttpServletRequest對象在表中,列出了一系列用于獲取請求消息行信息的方當請求Servlet時,需要通過

請求頭向服務器傳遞附加信

息,例如,客戶端可以接收

的數(shù)據(jù)類型,壓縮方式,語

言等等。為此,在HttpServletRequest接口中

,定義了一系列用于獲取HTTP請求頭字段的方法,

如表所示。獲取請求消息頭的相關方法4.3HttpServletRequest對象當請求Servlet時,需要通過獲取請求消息頭的相關方法4.

在表中,列出了一系列用于讀取HTTP請求消息頭字段的方法,為了更好地掌握這些方法,接下來通過一個案例來學習這些方法的使用,請查看教材文件4-11。案例代碼4.3HttpServletRequest對象在表中,列出了一系列用于讀取HTTP請求消息頭字在實際開發(fā)中,經(jīng)常會使用Referer頭字段,例如,一些站點為了吸引人氣并且提高站點訪問量,提供了各種軟件的下載頁面,但是它們本身沒有這些資源,只是將下載的超鏈接指向其它站點上的資源。而真正提供了下載資源的站點為了防止這種“盜鏈”,就需要檢查請求來源,只接收本站鏈接發(fā)送的下載請求,阻止其它站點鏈接的下載請求。

接下來通過一個案例,分步驟講解如何利用Referer請求頭防止“盜鏈”,請查看教材4.3.2小節(jié)的動手體驗。案例代碼動手體驗:利用Referer請求頭防止“盜鏈”在實際開發(fā)中,經(jīng)常會使用Referer頭字段,例如,一些站點在實際開發(fā)中,經(jīng)常需要

獲取用戶提交的表單數(shù)據(jù)

,例如,用戶名、密碼、

電子郵件等,為了方便獲

取表單中的請求參數(shù),在HttpServletRequest接口

的父類ServletRequest中

,定義了一系列獲取請求

參數(shù)的方法,如表所示。獲取請求參數(shù)4.4HttpServletRequest應用在實際開發(fā)中,經(jīng)常需要獲取請求參數(shù)4.4HttpServl

表中,列出了HttpServletRequest獲取請求參數(shù)的一系列方法。其中,getParameter()方法用于獲取某個指定的參數(shù),而getParameterValues()方法用于獲取多個同名的參數(shù)。接下來,通過一個具體的案例,分步驟講解這兩個方法的使用,請查看教材文件4-13。案例代碼4.4HttpServletRequest應用表中,列出了HttpServletReques任務案例案例代碼接下來,通過解決請求參數(shù)的中文亂碼問題來熟悉本階段的知識點,請查看教材【任務4-3】?!救蝿?-3】解決請求參數(shù)的中文亂碼問題任務案例案例代碼接下來,通過解決請求參數(shù)的中文亂碼問Request對象不僅可以獲取一系列數(shù)據(jù),還可以通過屬性傳遞數(shù)據(jù)。在ServletRequest接口中,定義了一系列操作屬性的方法,具體如下:setAttribute()方法該方法用于將一個對象與一個名稱關聯(lián)后存儲進ServletRequest對象中,其完整語法定義如下:需要注意的是,如果ServletRequest對象中已經(jīng)存在指定名稱的屬性,setAttribute()方法將會先刪除原來的屬性,然后再添加新的屬性。如果傳遞給setAttribute()方法的屬性值對象為null,則刪除指定名稱的屬性,這時的效果等同于removeAttribute()方法。通過Request對象傳遞數(shù)據(jù)4.4HttpServletRequest應用Request對象不僅可以獲取一系列數(shù)據(jù),還可以通過屬性傳遞getAttribute()方法該方法用于從ServletRequest對象中返回指定名稱的屬性對象,其完整的語法定義如下:removeAttribute()方法該方法用于從ServletRequest對象中刪除指定名稱的屬性,其完整的語法定義如下:4.4HttpServletRequest應用getAttribute()方法4.4HttpServlegetAttributeNames()方法該方法用于返回一個包含ServletRequest對象中的所有屬性名的Enumeration對象,在此基礎上,可以對ServletRequest對象中的所有屬性進行遍歷處理。getAttributeNames()方法的完整語法定義如下:需要注意的是,只有屬于同一個請求中的數(shù)據(jù)才可以通過ServletRequest對象傳遞數(shù)據(jù)。關于ServletRequest對象操作屬性的具體用法,將在后面的小節(jié)進行詳細講解。在此,大家只需了解即可。4.4HttpServletRequest應用getAttributeNames()方法4.4HttpS當一個Web資源收到客戶端的請求后,如果希望服務器通知另外一個資源去處理請求,這時,除了使用sendRedirect()方法實現(xiàn)請求重定向外,還可以通過RequestDispatcher接口的實例對象來實現(xiàn)。在ServletRequest接口中定義了一個獲取RequestDispatcher對象的方法,如表所示。RequestDispatcher接口4.5RequestDispatcher對象的應用當一個Web資源收到客戶端的請求后,如果希望服務器通知另外一獲取到RequestDispatcher對象后,最重要的工作就是通知其它Web資源處理當前的Servlet請求,為此,在RequestDispatcher接口中,定義了兩個相關方法,如表所示。表中列舉的兩個方法中,forward()方法可以實現(xiàn)請求轉發(fā),include()方法可以實現(xiàn)請求包含,關于請求轉發(fā)和請求包含的相關知識,將在下面的小節(jié)中進行詳細講解。4.5RequestDispatcher對象的應用獲取到RequestDispatcher對象后,最重要的工作在Servlet中,如果當前Web資源不想處理請求時,可以通過forward()方法將當前請求傳遞給其它的Web資源進行處理,這種方式稱為請求轉發(fā)。為了使讀者更好地理解使用forward()方法實現(xiàn)請求轉發(fā)的工作原理,接下來通過一張圖來描述,如下圖所示。從圖中可以看出,當客戶端訪問Servlet1

時,可以通過forward()方法將請求轉發(fā)

給其它Web資源,其它Web資源處理完

請求后,直接將響應結果返回到客戶端。請求轉發(fā)4.5RequestDispatcher對象的應用在Servlet中,如果當前Web資源不想處理請求時,可以通

了解了forward()方法的工作原理后,接下來,通過一個案例來學習forward()方法的使用,請查看教材文件4-16~4-17。案例代碼4.5RequestDispatcher對象的應用了解了forward()方法的工作原理后,請求包含指的是使用include()方法將Servlet請求轉發(fā)給其它Web資源進行處理,與請求轉發(fā)不同的是,在請求包含返回的響應消息中,既包含了當前Servlet的響應消息,也包含了其他Web資源所作出的響應消息。為了使讀者更好地理解使用include()方法實現(xiàn)請求包含的工作原理,接下來,通過一個圖來描述如圖所示。從圖中可以看出,當客戶端訪問Servlet1

時,通過調(diào)用include()方法將其它Web

資源包含了進來,這樣,當請求處理完

畢后,回送給客戶端的響應結果既包含

當前Servlet的響應結果,也包含其它Web資源的響應結果。請求包含4.5RequestDispatcher對象的應用請求包含指的是使用include()方法將Servlet請求

了解了include()方法的工作原理后,接下來,通過一個案例來講解include()方法的使用,請查看教材文件4-18~4-19。案例代碼4.5RequestDispatcher對象的應用了解了include()方法的工作原理后,接

本章主要介紹了HttpServletResponse對象和HttpServletRequest對象的使用,其中HttpServletResponse對象封裝了HTTP響應消息,并且提供了發(fā)送狀態(tài)碼、發(fā)送響應消息頭、發(fā)送響應消息體的方法。使用這些方法可以解決中文輸出亂碼問題,實現(xiàn)網(wǎng)頁的定時刷新跳轉,請求重定向等。HttpServletRequest對象封裝了HTTP請求消息,也提供了獲取請求行、獲取請求消息頭、獲取請求參數(shù)的方法。使用這些方法可以解決請求參數(shù)的中文亂碼問題,并且使用request域對象傳遞數(shù)據(jù)的方法,還可以實現(xiàn)請求轉發(fā)和請求包含。HttpServletResponse和HttpServletRequest在Web開發(fā)中至關重要,大家要認真學習,深刻掌握。4.6本章小結本章主要介紹了HttpServletRespoJava-Web程序設計任務教程第4章-請求和響課件第四章請求和響應請求重定向請求消息頭的獲取解決請求參數(shù)中的中文亂碼問題請求包含請求行消息的獲取請求參數(shù)的獲取請求轉發(fā)第四章請求和響應請求重定向請求行消息的獲取4掌握如何實現(xiàn)請求轉發(fā)與請求重定向3掌握如何解決請求和響應過程中的中文亂碼問題掌握掌握掌握掌握掌握HttpServletRequest對象及其應用1掌握HttpServletRequest對象及其應用2學習目標4掌握如何實現(xiàn)3掌握如何解決請求掌握掌握掌握掌握4.1HttpServletResponse對象4.2HttpServletResponse應用4.3HttpServletRequest對象4.4HttpServletRequest應用4.5RequestDispatcher對象的應用?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構?點擊查看本小節(jié)知識架構目錄4.1HttpServletResponse對象4.2Htt返回目錄.24.1.3發(fā)送狀態(tài)碼相關的方法發(fā)送響應消息頭相關的方法發(fā)送響應消息體相關的方法4.1HttpServletResponse對象知識架構返回目錄.24.1.3發(fā)送狀態(tài)碼相關的方法發(fā)返回目錄4.2.1【任務4-1】解決中文輸出亂碼問題【任務4-2】實現(xiàn)網(wǎng)頁定時刷新并跳轉實現(xiàn)請求重定向4.2HttpServletResponse應用知識架構返回目錄4.2.1【任務4-1】解決中文輸出亂碼問題【任務4返回目錄4.3.1獲取請求行消息的相關方法獲取請求消息頭的相關方法4.3HttpServletRequest對象4.3.2知識架構返回目錄4.3.1獲取請求行消息的相關方法獲取請求消息頭的相返回目錄.2獲取請求參數(shù)【任務4-3】解決請求參數(shù)的中文亂碼問題通過Request對象傳遞數(shù)據(jù)4.4HttpServletRequest應用知識架構返回目錄.2獲取請求參數(shù)【任務4-3】解決請返回目錄.3RequestDispatcher接口請求轉發(fā)請求包含4.5RequestDispatcher對象的應用4.5.2知識架構返回目錄.3RequestDispatcheServlet最主要的作用就是處理客戶端請求,并向客戶端做出響應。為此,針對Servlet的每次請求,Web服務器在調(diào)用service()方法之前,都會創(chuàng)建兩個對象,分別是HttpServletRequest和HttpServletResponse。其中,HttpServletRequest用于封裝HTTP請求消息,簡稱request對象。HttpServletResponse用于封裝HTTP響應消息,簡稱response對象。request對象和response對象在請求Servlet過程中至關重要,接下來,通過一張圖來描述瀏覽器訪問Servlet的交互過程,如圖所示。請求和響應Servlet最主要的作用就是處理客戶端請求,并向客戶端做出需要注意的是,在Web服務器運行階段,每個Servlet都只會創(chuàng)建一個實例對象。然而,每次HTTP請求,Web服務器都會調(diào)用所請求Servlet實例的service(HttpServletRequestrequest,HttpServletResponseresponse)方法,重新創(chuàng)建一個request對象和一個response對象。接下來,本章將針對request對象和response對象進行詳細地講解。請求和響應請求和響應在ServletAPI中,定義了一個HttpServletResponse接口,它繼承自ServletResponse接口,專門用來封裝HTTP響應消息。由于HTTP響應消息分為狀態(tài)行、響應消息頭、消息體三部分,因此,在HttpServletResponse接口中定義了向客戶端發(fā)送響應狀態(tài)碼、響應消息頭、響應消息體的方法,接下來,本節(jié)將針對這些方法進行詳細的講解。4.1HttpServletResponse對象在ServletAPI中,定義了一個HttpServlet當Servlet向客戶端回送響應消息時,需要在響應消息中設置狀態(tài)碼。為此,在HttpServletResponse接口中,定義了兩個發(fā)送狀態(tài)碼的方法,具體如下。1.setStatus(intstatus)方法該方法用于設置HTTP響應消息的狀態(tài)碼,并生成響應狀態(tài)行。由于響應狀態(tài)行中的狀態(tài)描述信息直接與狀態(tài)碼相關,而HTTP版本由服務器確定,因此,只要通過setStatus(intstatus)方法設置了狀態(tài)碼,即可實現(xiàn)狀態(tài)行的發(fā)送。需要注意的是,正常情況下,Web服務器會默認產(chǎn)生一個狀態(tài)碼為200的狀態(tài)行。發(fā)送狀態(tài)碼相關的方法4.1HttpServletResponse對象當Servlet向客戶端回送響應消息時,需要在響應消息中設置2.sendError(intsc)方法該方法用于發(fā)送表示錯誤信息的狀態(tài)碼,例如,404狀態(tài)碼表示找不到客戶端請求的資源。在response對象中,提供了兩個重載的sendError(intsc)方法,具體如下:在上面重載的兩個方法中,第一個方法只是發(fā)送錯誤信息的狀態(tài)碼,而第二個方法除了發(fā)送狀態(tài)碼外,還可以增加一條用于提示說明的文本信息,該文本信息將出現(xiàn)在發(fā)送給客戶端的正文內(nèi)容中。4.1HttpServletResponse對象2.sendError(intsc)方法4.1HttpS當Servlet向客戶端發(fā)送響應消息時,由于HTTP協(xié)議的響應頭字段有很多種,為此,在HttpServletResponse接口中,定義了一系列設置HTTP響應頭字段的方法,如表所示。發(fā)送響應消息頭相關方法4.1HttpServletResponse對象當Servlet向客戶端發(fā)送響應消息時,由于HTTP協(xié)議的響由于在HTTP響應消息中,大量的數(shù)據(jù)都是通過響應消息體傳遞的,因此,ServletResponse遵循以IO流傳遞大量數(shù)據(jù)的設計理念。在發(fā)送響應消息體時,定義了兩個與輸出流相關的方法,具體如下。1.getOutputStream()方法該方法所獲取的字節(jié)輸出流對象為ServletOutputStream類型。由于ServletOutputStream是OutputStream的子類,它可以直接輸出字節(jié)數(shù)組中的二進制數(shù)據(jù)。因此,要想輸出二進制格式的響應正文,就需要使用getOutputStream()方法。發(fā)送響應消息頭相關方法4.1HttpServletResponse對象由于在HTTP響應消息中,大量的數(shù)據(jù)都是通過響應消息體傳遞的2.getWriter()方法該方法所獲取的字符輸出流對象為PrintWriter類型。由于PrintWriter類型的對象可以直接輸出字符文本內(nèi)容,因此,要想輸出內(nèi)容全為字符文本的網(wǎng)頁文檔,需要使用getWriter()方法。

了解了response對象發(fā)送響應消息體的兩個方法后,接下來,通過一個案例來學習這兩個方法的使用,請查看教材文件4-1。

接下來,對文件4-1進行修改,使用getWriter()方法發(fā)送消息體,請查看教材文件4-2。案例代碼4.1HttpServletResponse對象2.getWriter()方法了解了respo注意:雖然response對象的getOutputStream()和getWriter()方法都可以發(fā)送響應消息體,但是,它們之間互相排斥,不可同時使用,否則會發(fā)生IllegalStateException異常,如圖所示。圖中發(fā)生異常的原因就是在Servlet中,調(diào)用response.getWriter()方法之前已經(jīng)調(diào)用了response.getOutputStream()方法。4.1HttpServletResponse對象注意:4.1HttpServletResponse對象任務案例案例代碼接下來,通過解決中文輸出亂碼問題來熟悉本階段的知識點,請查看教材【任務4-1】。【任務4-1】解決中文輸出亂碼問題任務案例案例代碼接下來,通過解決中文輸出亂碼問題來熟任務案例案例代碼接下來,通過實現(xiàn)網(wǎng)頁定時刷新并跳轉來熟悉本階段的知識點,請查看教材【任務4-2】。【任務4-2】實現(xiàn)網(wǎng)頁定時刷新并跳轉任務案例案例代碼接下來,通過實現(xiàn)網(wǎng)頁定時刷新并跳轉來在某些情況下,針對客戶端的請求,一個Servlet類可能無法完成全部工作。這時,可以使用請求重定向來完成。所謂請求重定向,指的是Web服務器接收到客戶端的請求后,可能由于某些條件限制,不能訪問當前請求URL所指向的Web資源,而是指定了一個新的資源路徑,讓客戶端重新發(fā)送請求。為了實現(xiàn)請求重定向,在HttpServletResponse接口中,定義了一個sendRedirect()方法,該方法用于生成302響應碼和Location響應頭,從而通知客戶端重新訪問Location響應頭中指定的URL,sendRedirect()方法的完整語法如下所示:實現(xiàn)請求重定向4.2HttpServletResponse應用在某些情況下,針對客戶端的請求,一個Servlet類可能無法需要注意的是,參數(shù)location可以使用相對URL,Web服務器會自動將相對URL翻譯成絕對URL,再生成Location頭字段。為了使讀者更好地了解sendRedirect()方法如何實現(xiàn)請求重定向,接下來,通過一個圖來描述sendRedirect()方法的工作原理,如圖所示。在圖中,當客戶端訪問Servlet1時

,

由于在Servlet1中調(diào)用了sendRedirect()

方法將請求重定向到Servlet2,因此,Web服務器在收到Servlet1的響應消息

后,立刻向Servlet2發(fā)送請求。Servlet2對請求處理完畢后,再將響應消息回

送給客戶端。4.2HttpServletResponse應用需要注意的是,參數(shù)location可以使用相對URL,Web

了解了sendRedirect()方法的工作原理后,接下來,通過一個用戶登錄的案例,分步驟講解sendRedirect()方法的使用,請查看教材4.2.1小節(jié)。案例代碼4.2HttpServletResponse應用了解了sendRedirect()方法的工作原在ServletAPI中,定義了一個HttpServletRequest接口,它繼承自ServletRequest接口,專門用來封裝HTTP請求消息。由于HTTP請求消息分為請求行、請求消息頭和請求消息體三部分,因此,在HttpServletRequest接口中定義了獲取請求行、請求頭和請求消息體的相關方法,接下來,本節(jié)將針對這些方法進行詳細地講解。4.3HttpServletRequest對象在ServletAPI中,定義了一個HttpServlet當訪問Servlet時,會在請求消息的請求行中,包含請求方法、請求資源名、請求路徑等信息,為了獲取這些信息,在HttpServletRequest接口中,定義了一系列用于獲取請求行的方法,如表所示。獲取請求行信息的相關信息4.3HttpServletRequest對象當訪問Servlet時,會在請求消息的請求行中,包含請求方法

在表中,列出了一系列用于獲取請求消息行信息的方法,為了使讀者更好地理解這些方法,接下來,通過一個案例來演示這些方法的使用,請查看教材文件4-10。案例代碼4.3HttpServletRequest對象在表中,列出了一系列用于獲取請求消息行信息的方當請求Servlet時,需要通過

請求頭向服務器傳遞附加信

息,例如,客戶端可以接收

的數(shù)據(jù)類型,壓縮方式,語

言等等。為此,在HttpServletRequest接口中

,定義了一系列用于獲取HTTP請求頭字段的方法,

如表所示。獲取請求消息頭的相關方法4.3HttpServletRequest對象當請求Servlet時,需要通過獲取請求消息頭的相關方法4.

在表中,列出了一系列用于讀取HTTP請求消息頭字段的方法,為了更好地掌握這些方法,接下來通過一個案例來學習這些方法的使用,請查看教材文件4-11。案例代碼4.3HttpServletRequest對象在表中,列出了一系列用于讀取HTTP請求消息頭字在實際開發(fā)中,經(jīng)常會使用Referer頭字段,例如,一些站點為了吸引人氣并且提高站點訪問量,提供了各種軟件的下載頁面,但是它們本身沒有這些資源,只是將下載的超鏈接指向其它站點上的資源。而真正提供了下載資源的站點為了防止這種“盜鏈”,就需要檢查請求來源,只接收本站鏈接發(fā)送的下載請求,阻止其它站點鏈接的下載請求。

接下來通過一個案例,分步驟講解如何利用Referer請求頭防止“盜鏈”,請查看教材4.3.2小節(jié)的動手體驗。案例代碼動手體驗:利用Referer請求頭防止“盜鏈”在實際開發(fā)中,經(jīng)常會使用Referer頭字段,例如,一些站點在實際開發(fā)中,經(jīng)常需要

獲取用戶提交的表單數(shù)據(jù)

,例如,用戶名、密碼、

電子郵件等,為了方便獲

取表單中的請求參數(shù),在HttpServletRequest接口

的父類ServletRequest中

,定義了一系列獲取請求

參數(shù)的方法,如表所示。獲取請求參數(shù)4.4HttpServletRequest應用在實際開發(fā)中,經(jīng)常需要獲取請求參數(shù)4.4HttpServl

表中,列出了HttpServletRequest獲取請求參數(shù)的一系列方法。其中,getParameter()方法用于獲取某個指定的參數(shù),而getParameterValues()方法用于獲取多個同名的參數(shù)。接下來,通過一個具體的案例,分步驟講解這兩個方法的使用,請查看教材文件4-13。案例代碼4.4HttpServletRequest應用表中,列出了HttpServletReques任務案例案例代碼接下來,通過解決請求參數(shù)的中文亂碼問題來熟悉本階段的知識點,請查看教材【任務4-3】?!救蝿?-3】解決請求參數(shù)的中文亂碼問題任務案例案例代碼接下來,通過解決請求參數(shù)的中文亂碼問Request對象不僅可以獲取一系列數(shù)據(jù),還可以通過屬性傳遞數(shù)據(jù)。在ServletRequest接口中,定義了一系列操作屬性的方法,具體如下:setAttribute()方法該方法用于將一個對象與一個名稱關聯(lián)后存儲進ServletRequest對象中,其完整語法定義如下:需要注意的是,如果ServletRequest對象中已經(jīng)存在指定名稱的屬性,setAttribute()方法將會先刪除原來的屬性,然后再添加新的屬性。如果傳遞給setAttribute()方法的屬性值對象為null,則刪除指定名稱的屬性,這時的效果等同于removeAttribute()方法。通過Request對象傳遞數(shù)據(jù)4.4HttpServletRequest應用Request對象不僅可以獲取一系列數(shù)據(jù),還可以通過屬性傳遞getAttribute()方法該方法用于從ServletRequest對象中返回指定名稱的屬性對象,其完整的語法定義如下:removeAttribute()方法該方法用于從ServletRequest對象中刪除指定名稱的屬性,其完整的語法定義如下:4.4HttpServletRequest應用getAttribute()方法4.4HttpServlegetAttributeNames()方法該方法用于返回一個包含ServletRequest對象中的所有屬性名的Enumeration對象,在此基礎上,可以對ServletRequest對象中的所有屬性進行遍歷處理。getAttributeNames()方法的完整語法定義如下:需要注意的是,只有屬于同一個請求中的數(shù)據(jù)才可以通過ServletRequest對象傳遞數(shù)據(jù)。關于ServletRequest對象操作屬性的具體用法,將在后面的小節(jié)進行詳細講解。在此,大家只需了解即可。4.4HttpServletRequest應用getAttributeNames()方法4.4HttpS當一個Web資源收到客戶端的請求后,如果希望服務器通知另外一個資源去處理請求,這時,除了使用sendRedirec

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論