內(nèi)容java web核心基礎(chǔ)_第1頁
內(nèi)容java web核心基礎(chǔ)_第2頁
內(nèi)容java web核心基礎(chǔ)_第3頁
內(nèi)容java web核心基礎(chǔ)_第4頁
內(nèi)容java web核心基礎(chǔ)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、北京傳智播客教育 request&response王昭珽 北京傳智播客教育 簡介Web服務(wù)器收到客戶端的http請求,會針對每一次請求,分別創(chuàng)建一個用于代表請求的request對象、和代表響應(yīng)的response對象。request和response對象即然代表請求和響應(yīng),那我們要獲取客戶機提交過來的數(shù)據(jù),只需要找request對象就行了。要向客戶機輸出數(shù)據(jù),只需要找response對象就行了。北京傳智播客教育 HttpServletResponseHttpServletResponse對象代表服務(wù)器的響應(yīng)。這個對象中封裝了向客戶端發(fā)送數(shù)據(jù)、發(fā)送響應(yīng)頭,發(fā)送響應(yīng)狀態(tài)碼的方法。查看HttpServ

2、letResponse的API文檔北京傳智播客教育 response常見應(yīng)用向客戶端輸出中文數(shù)據(jù)用OutputStream(字節(jié)流)發(fā)送數(shù)據(jù):1、response.getOutputStream().write(“中國”.getBytes();/以默認(rèn)編碼發(fā)送數(shù)據(jù)2、response.getOutputStream().write(中國.getBytes(UTF-8);/以UTF-8編碼發(fā)送數(shù)據(jù),瀏覽器(默認(rèn)用GB2312)會出現(xiàn)亂碼畫圖描述出現(xiàn)該問題的原因。解決辦法:2.1通過更改瀏覽器的編碼方式:IE/”查看”/”編碼”/”UTF-8”(不可取)2.2通過設(shè)置響應(yīng)頭告知客戶端編碼方式:re

3、sponse.setHeader(“Content-type”, “text/html;charset=UTF-8”);/告知瀏覽器數(shù)據(jù)類型及編碼2.3通過meta標(biāo)簽?zāi)M請求頭:out.write(.getBytes();2.4通過以下方法:response.setContentType(text/html;charset=UTF-8);總結(jié):程序以什么編碼輸出,就需要告知客戶端以什么編碼顯示。小細節(jié):輸出字符“1”用response.getOutputStream().write(1);出現(xiàn)的問題?北京傳智播客教育 response常見應(yīng)用向客戶端輸出中文數(shù)據(jù)用PrintWriter(字符

4、流)發(fā)送數(shù)據(jù):示例:response.getWriter().write(“中國” );有沒有亂碼?原因:以默認(rèn)編碼發(fā)送數(shù)據(jù) ISO-8859-1(沒有中國二字編碼),此時會發(fā)生亂碼解決辦法:setCharacterEncoding(“UTF-8”);/更改編碼為UTF-8response.setHead(“Context-type”,”text/html;charset=UTF-8”);/告訴客戶端編碼方式注意:不要忘記告訴客戶端的編碼方式。由于經(jīng)常改動編碼,response提供了一種更簡單的方式response. setContentType(“text/html;charset=UTF-

5、8”);其作用相當(dāng)于以上兩條代碼。北京傳智播客教育 response常見應(yīng)用文件下載中文文件的下載問題:文件名亂碼或無法下載解決:將文件名進行編碼北京傳智播客教育 response常見應(yīng)用輸出隨機圖片(CAPTCHA圖像) pletely Automated Public Turing Test to Tell Computers and Humans Apart (全自動區(qū)分計算機和人類的測試) 相關(guān)主要類(JDK 查看API)BufferedImage:內(nèi)存圖像Graphics:畫筆ImageIO:輸出圖像放在html頁面上注意:瀏覽器默認(rèn)會緩存圖片控制客戶端不要緩存:response.a

6、ddHeader(Pragma, no-cache); response.setHeader(Cache-Control, no-cache); response.setHeader(Expires, 0);js刷新圖片 北京傳智播客教育 response常見應(yīng)用發(fā)送http頭,控制瀏覽器定時刷新網(wǎng)頁1、輸出一個隨機數(shù),控制瀏覽器每2S刷新一次2、利用Refresh刷新到其他組件。模擬注冊頁面,注冊處理交由一個Servlet,在Servlet處理完成后,顯示注冊成功并轉(zhuǎn)向主頁。(meta也可實現(xiàn))3、思考:web.xml中能使用Servlet作為默認(rèn)主頁嗎?點這里看演示北京傳智播客教育 res

7、ponse常見應(yīng)用發(fā)送http頭,控制瀏覽器緩存當(dāng)前文檔內(nèi)容 response.setDateHeader(“Expires”, System.currentTimeMillis() *60*60);/緩存1小時,注意此處是相對于1970年1月1日00:00:00的時間作用:有些不怎么變化的數(shù)據(jù),利用緩存能減輕服務(wù)器的負擔(dān)。查看一下IE的緩存文件北京傳智播客教育 response常見應(yīng)用通過response實現(xiàn)請求重定向。請求重定向指:一個web資源收到客戶端請求后,通知客戶端去訪問另外一個web資源,這稱之為請求重定向。地址欄會變,并發(fā)送2次請求,增加服務(wù)器負擔(dān)實現(xiàn)方式response.se

8、ndRedirect()實現(xiàn)原理:302狀態(tài)碼和location頭即可實現(xiàn)重定向北京傳智播客教育 請求重定向的運行流程 北京傳智播客教育 response細節(jié)getOutputStream和getWriter方法分別用于得到輸出二進制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOuputStream、Printwriter對象。getOutputStream和getWriter這兩個方法互相排斥,調(diào)用了其中的任何一個方法后,就不能再調(diào)用另一方法。 會拋異常。Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數(shù)據(jù)將被Servlet引擎從response里面獲取,

9、Servlet引擎將這些數(shù)據(jù)當(dāng)作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶端。 Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經(jīng)調(diào)用過close方法,如果沒有,Servlet引擎將調(diào)用close方法關(guān)閉該輸出流對象。 北京傳智播客教育 HttpServletRequest王昭珽北京傳智播客教育 HttpServletRequestHttpServletRequest對象代表客戶端的請求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時,HTTP請求頭中的所有信息都封裝在這個對象中,開發(fā)人員通過

10、這個對象的方法,可以獲得客戶這些信息。查看request的API文檔北京傳智播客教育 request常用方法獲得客戶機信息getRequestURL方法返回客戶端發(fā)出請求時的完整URL。getRequestURI方法返回請求行中的資源名部分。getQueryString 方法返回請求行中的參數(shù)部分。getRemoteAddr方法返回發(fā)出請求的客戶機的IP地址getRemoteHost方法返回發(fā)出請求的客戶機的完整主機名getRemotePort方法返回客戶機所使用的網(wǎng)絡(luò)端口號getLocalAddr方法返回WEB服務(wù)器的IP地址。getLocalName方法返回WEB服務(wù)器的主機名getMet

11、hod得到客戶機請求方式北京傳智播客教育 Request常用方法獲得客戶機請求頭getHead(name)方法 getHeaders(String name)方法 getHeaderNames方法 獲得客戶機請求參數(shù)(客戶端提交的數(shù)據(jù))getParameter(name)方法getParameterValues(String name)方法getParameterNames方法 getParameterMap方法 /做框架用,非常實用getInputStream北京傳智播客教育 request常見應(yīng)用1各種表單輸入項數(shù)據(jù)的獲取text、password、radio、checkbox、file、

12、select、textarea、 hidden、image、button給js編程用請求參數(shù)的中文亂碼問題瀏覽器是什么編碼就以什么編碼傳送數(shù)據(jù) 解決:request.setCharacterEncoding(“UTF-8”);/POST有效new String(username.getBytes(“ISO-8859-1”),“UTF-8”);/GET方式超鏈接:cn/GET方式更改Tomcat的配置解決URL編碼問題:北京傳智播客教育 request常見應(yīng)用2request對象實現(xiàn)請求轉(zhuǎn)發(fā):請求轉(zhuǎn)發(fā)指一個web資源收到客戶端請求后,通知服務(wù)器去調(diào)用另外一個web資源進行處理。request對象

13、提供了一個getRequestDispatcher方法,該方法返回一個RequestDispatcher對象,調(diào)用這個對象的forward方法可以實現(xiàn)請求轉(zhuǎn)發(fā)。request對象同時也是一個域?qū)ο螅_發(fā)人員通過request對象在實現(xiàn)轉(zhuǎn)發(fā)時,把數(shù)據(jù)通過request對象帶給其它web資源處理。setAttribute方法 getAttribute方法 removeAttribute方法getAttributeNames方法北京傳智播客教育 轉(zhuǎn)發(fā)和包含一個Servlet對象無法獲得另一個Servelt對象的引用;如果需要多個Servet組件共同協(xié)作(數(shù)據(jù)傳遞),只能使用Servelt規(guī)范為我們提

14、供的兩種方式:請求轉(zhuǎn)發(fā):Servlet(源組件)先對客戶請求做一些預(yù)處理操作,然后把請求轉(zhuǎn)發(fā)給其他web組件(目標(biāo)組件)來完成包括生成響應(yīng)結(jié)果在內(nèi)的后續(xù)操作。包含:Servelt(源組件)把其他web組件(目標(biāo)組件)生成的響應(yīng)結(jié)果包含到自身的響應(yīng)結(jié)果中。轉(zhuǎn)發(fā)和請求的共同點源組件和目標(biāo)組件處理的都是同一個客戶請求,源組件和目標(biāo)組件共享同一個ServeltRequest和ServletResponse對象目標(biāo)組件都可以為Servlet、JSP或HTML文檔都依賴 javax.servlet.RequestDispatcher接口北京傳智播客教育 RequestDispather表示請求分發(fā)器,它有

15、兩個方法:forward():把請求轉(zhuǎn)發(fā)給目標(biāo)組件public void forward(ServletRequest request,ServletResponse response) throws ServletException,java.io.IOExceptioninclude():包含目標(biāo)組件的響應(yīng)結(jié)果public void include(ServletRequest request,ServletResponse response) throws ServletException,java.io.IOException得到RequestDispatcher對象1、Servlet

16、Context對象的getRequestDispather(String path1)path1必須用絕對路徑,即以”/”開頭,若用相對路徑會拋出異常IllegalArgumentException2、ServletRequest對象的getRequestDispatcher(String path2)path2可以用絕對路徑也可以用相對路徑北京傳智播客教育 轉(zhuǎn)發(fā)dispatcher.forward(request,response)的處理流程:1、清空用于存放響應(yīng)正文數(shù)據(jù)的緩沖區(qū)2、如果目標(biāo)組件為Servlet或JSP,就調(diào)用它們,把它們產(chǎn)生的響應(yīng)結(jié)果發(fā)送到客戶端;如果目標(biāo)組件為文件系統(tǒng)中的

17、靜態(tài)HTML文檔,就讀取文檔中的數(shù)據(jù)并把它發(fā)送給客戶端。特點:1、由于forward()方法先清空用于存放響應(yīng)正文數(shù)據(jù)的緩沖區(qū),因此源組件生成的響應(yīng)結(jié)果不會被發(fā)送到客戶端,只有目標(biāo)組件生成的響應(yīng)結(jié)果才會被送到客戶端。2、如果源組件在進行請求轉(zhuǎn)發(fā)之前,已經(jīng)提交了響應(yīng)結(jié)果(如調(diào)用了response的flush或close方法),那么forward()方法會拋出IllegalStateException。為了避免該異常,不應(yīng)該在源組件中提交響應(yīng)結(jié)果。北京傳智播客教育 請求轉(zhuǎn)發(fā)的運行流程北京傳智播客教育 包含include()方法的處理流程:1、如果目標(biāo)組件為Servlet或JSP,就執(zhí)行它們,并把它

18、們產(chǎn)生的響應(yīng)正文添加到源組件的響應(yīng)結(jié)果中;如果目標(biāo)組件為HTML文檔,就直接把文檔的內(nèi)容添加到源組件的響應(yīng)結(jié)果中。2、返回到源組件的服務(wù)方法中,繼續(xù)執(zhí)行后續(xù)代碼塊。特點:1、源組件與被包含的目標(biāo)組件的輸出數(shù)據(jù)都會被添加到響應(yīng)結(jié)果中。2、在目標(biāo)組件中對響應(yīng)狀態(tài)代碼或者響應(yīng)頭所做的修改都會被忽略。北京傳智播客教育 請求范圍web應(yīng)用范圍內(nèi)的共享數(shù)據(jù)作為ServeltContext對象的屬性而存在(setAttribute),只要共享ServletContext對象也就共享了其數(shù)據(jù)。請求范圍內(nèi)的共享數(shù)據(jù)作為ServletRequest對象的屬性而存在(setAttribute),只要共享ServletRequest對象也就共享了其數(shù)據(jù)。北京傳智播客教育 重定向重定向機制的運作流程1、用戶在瀏覽器端輸入特定URL,請求訪問服務(wù)器端的某個組件2、服務(wù)器端的組件返回一個狀態(tài)碼為302的響應(yīng)結(jié)果。3、當(dāng)瀏覽器端接收到這種響應(yīng)結(jié)果后,再立即自動請求訪問另一個web組件4、瀏覽器端接收到來自另一個web組件的響應(yīng)結(jié)果。HttpServeltResponse的sendRedirect(String location)用于重定向北京傳智播客教育 重定向特點Servlet源組件生成的響應(yīng)結(jié)果不會被發(fā)送到客戶端。response.s

溫馨提示

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

最新文檔

評論

0/150

提交評論