版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京傳智播客教育 request&response王昭珽 北京傳智播客教育 簡(jiǎn)介Web服務(wù)器收到客戶端的http請(qǐng)求,會(huì)針對(duì)每一次請(qǐng)求,分別創(chuàng)建一個(gè)用于代表請(qǐng)求的request對(duì)象、和代表響應(yīng)的response對(duì)象。request和response對(duì)象即然代表請(qǐng)求和響應(yīng),那我們要獲取客戶機(jī)提交過(guò)來(lái)的數(shù)據(jù),只需要找request對(duì)象就行了。要向客戶機(jī)輸出數(shù)據(jù),只需要找response對(duì)象就行了。北京傳智播客教育 HttpServletResponseHttpServletResponse對(duì)象代表服務(wù)器的響應(yīng)。這個(gè)對(duì)象中封裝了向客戶端發(fā)送數(shù)據(jù)、發(fā)送響應(yīng)頭,發(fā)送響應(yīng)狀態(tài)碼的方法。查看HttpServ
2、letResponse的API文檔北京傳智播客教育 response常見(jiàn)應(yīng)用向客戶端輸出中文數(shù)據(jù)用OutputStream(字節(jié)流)發(fā)送數(shù)據(jù):1、response.getOutputStream().write(“中國(guó)”.getBytes();/以默認(rèn)編碼發(fā)送數(shù)據(jù)2、response.getOutputStream().write(中國(guó).getBytes(UTF-8);/以UTF-8編碼發(fā)送數(shù)據(jù),瀏覽器(默認(rèn)用GB2312)會(huì)出現(xiàn)亂碼畫圖描述出現(xiàn)該問(wèn)題的原因。解決辦法:2.1通過(guò)更改瀏覽器的編碼方式:IE/”查看”/”編碼”/”UTF-8”(不可取)2.2通過(guò)設(shè)置響應(yīng)頭告知客戶端編碼方式:re
3、sponse.setHeader(“Content-type”, “text/html;charset=UTF-8”);/告知瀏覽器數(shù)據(jù)類型及編碼2.3通過(guò)meta標(biāo)簽?zāi)M請(qǐng)求頭:out.write(.getBytes();2.4通過(guò)以下方法:response.setContentType(text/html;charset=UTF-8);總結(jié):程序以什么編碼輸出,就需要告知客戶端以什么編碼顯示。小細(xì)節(jié):輸出字符“1”用response.getOutputStream().write(1);出現(xiàn)的問(wèn)題?北京傳智播客教育 response常見(jiàn)應(yīng)用向客戶端輸出中文數(shù)據(jù)用PrintWriter(字符
4、流)發(fā)送數(shù)據(jù):示例:response.getWriter().write(“中國(guó)” );有沒(méi)有亂碼?原因:以默認(rèn)編碼發(fā)送數(shù)據(jù) ISO-8859-1(沒(méi)有中國(guó)二字編碼),此時(shí)會(huì)發(fā)生亂碼解決辦法:setCharacterEncoding(“UTF-8”);/更改編碼為UTF-8response.setHead(“Context-type”,”text/html;charset=UTF-8”);/告訴客戶端編碼方式注意:不要忘記告訴客戶端的編碼方式。由于經(jīng)常改動(dòng)編碼,response提供了一種更簡(jiǎn)單的方式response. setContentType(“text/html;charset=UTF-
5、8”);其作用相當(dāng)于以上兩條代碼。北京傳智播客教育 response常見(jiàn)應(yīng)用文件下載中文文件的下載問(wèn)題:文件名亂碼或無(wú)法下載解決:將文件名進(jìn)行編碼北京傳智播客教育 response常見(jiàn)應(yīng)用輸出隨機(jī)圖片(CAPTCHA圖像) pletely Automated Public Turing Test to Tell Computers and Humans Apart (全自動(dòng)區(qū)分計(jì)算機(jī)和人類的測(cè)試) 相關(guān)主要類(JDK 查看API)BufferedImage:內(nèi)存圖像Graphics:畫筆ImageIO:輸出圖像放在html頁(yè)面上注意:瀏覽器默認(rèn)會(huì)緩存圖片控制客戶端不要緩存:response.a
6、ddHeader(Pragma, no-cache); response.setHeader(Cache-Control, no-cache); response.setHeader(Expires, 0);js刷新圖片 北京傳智播客教育 response常見(jiàn)應(yīng)用發(fā)送http頭,控制瀏覽器定時(shí)刷新網(wǎng)頁(yè)1、輸出一個(gè)隨機(jī)數(shù),控制瀏覽器每2S刷新一次2、利用Refresh刷新到其他組件。模擬注冊(cè)頁(yè)面,注冊(cè)處理交由一個(gè)Servlet,在Servlet處理完成后,顯示注冊(cè)成功并轉(zhuǎn)向主頁(yè)。(meta也可實(shí)現(xiàn))3、思考:web.xml中能使用Servlet作為默認(rèn)主頁(yè)嗎?點(diǎn)這里看演示北京傳智播客教育 res
7、ponse常見(jiàn)應(yīng)用發(fā)送http頭,控制瀏覽器緩存當(dāng)前文檔內(nèi)容 response.setDateHeader(“Expires”, System.currentTimeMillis() *60*60);/緩存1小時(shí),注意此處是相對(duì)于1970年1月1日00:00:00的時(shí)間作用:有些不怎么變化的數(shù)據(jù),利用緩存能減輕服務(wù)器的負(fù)擔(dān)。查看一下IE的緩存文件北京傳智播客教育 response常見(jiàn)應(yīng)用通過(guò)response實(shí)現(xiàn)請(qǐng)求重定向。請(qǐng)求重定向指:一個(gè)web資源收到客戶端請(qǐng)求后,通知客戶端去訪問(wèn)另外一個(gè)web資源,這稱之為請(qǐng)求重定向。地址欄會(huì)變,并發(fā)送2次請(qǐng)求,增加服務(wù)器負(fù)擔(dān)實(shí)現(xiàn)方式response.se
8、ndRedirect()實(shí)現(xiàn)原理:302狀態(tài)碼和location頭即可實(shí)現(xiàn)重定向北京傳智播客教育 請(qǐng)求重定向的運(yùn)行流程 北京傳智播客教育 response細(xì)節(jié)getOutputStream和getWriter方法分別用于得到輸出二進(jìn)制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOuputStream、Printwriter對(duì)象。getOutputStream和getWriter這兩個(gè)方法互相排斥,調(diào)用了其中的任何一個(gè)方法后,就不能再調(diào)用另一方法。 會(huì)拋異常。Servlet程序向ServletOutputStream或PrintWriter對(duì)象中寫入的數(shù)據(jù)將被Servlet引擎從response里面獲取,
9、Servlet引擎將這些數(shù)據(jù)當(dāng)作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶端。 Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對(duì)象是否已經(jīng)調(diào)用過(guò)close方法,如果沒(méi)有,Servlet引擎將調(diào)用close方法關(guān)閉該輸出流對(duì)象。 北京傳智播客教育 HttpServletRequest王昭珽北京傳智播客教育 HttpServletRequestHttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過(guò)HTTP協(xié)議訪問(wèn)服務(wù)器時(shí),HTTP請(qǐng)求頭中的所有信息都封裝在這個(gè)對(duì)象中,開(kāi)發(fā)人員通過(guò)
10、這個(gè)對(duì)象的方法,可以獲得客戶這些信息。查看request的API文檔北京傳智播客教育 request常用方法獲得客戶機(jī)信息getRequestURL方法返回客戶端發(fā)出請(qǐng)求時(shí)的完整URL。getRequestURI方法返回請(qǐng)求行中的資源名部分。getQueryString 方法返回請(qǐng)求行中的參數(shù)部分。getRemoteAddr方法返回發(fā)出請(qǐng)求的客戶機(jī)的IP地址getRemoteHost方法返回發(fā)出請(qǐng)求的客戶機(jī)的完整主機(jī)名getRemotePort方法返回客戶機(jī)所使用的網(wǎng)絡(luò)端口號(hào)getLocalAddr方法返回WEB服務(wù)器的IP地址。getLocalName方法返回WEB服務(wù)器的主機(jī)名getMet
11、hod得到客戶機(jī)請(qǐng)求方式北京傳智播客教育 Request常用方法獲得客戶機(jī)請(qǐng)求頭getHead(name)方法 getHeaders(String name)方法 getHeaderNames方法 獲得客戶機(jī)請(qǐng)求參數(shù)(客戶端提交的數(shù)據(jù))getParameter(name)方法getParameterValues(String name)方法getParameterNames方法 getParameterMap方法 /做框架用,非常實(shí)用getInputStream北京傳智播客教育 request常見(jiàn)應(yīng)用1各種表單輸入項(xiàng)數(shù)據(jù)的獲取text、password、radio、checkbox、file、
12、select、textarea、 hidden、image、button給js編程用請(qǐng)求參數(shù)的中文亂碼問(wèn)題瀏覽器是什么編碼就以什么編碼傳送數(shù)據(jù) 解決:request.setCharacterEncoding(“UTF-8”);/POST有效new String(username.getBytes(“ISO-8859-1”),“UTF-8”);/GET方式超鏈接:cn/GET方式更改Tomcat的配置解決URL編碼問(wèn)題:北京傳智播客教育 request常見(jiàn)應(yīng)用2request對(duì)象實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā):請(qǐng)求轉(zhuǎn)發(fā)指一個(gè)web資源收到客戶端請(qǐng)求后,通知服務(wù)器去調(diào)用另外一個(gè)web資源進(jìn)行處理。request對(duì)象
13、提供了一個(gè)getRequestDispatcher方法,該方法返回一個(gè)RequestDispatcher對(duì)象,調(diào)用這個(gè)對(duì)象的forward方法可以實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)。request對(duì)象同時(shí)也是一個(gè)域?qū)ο螅_(kāi)發(fā)人員通過(guò)request對(duì)象在實(shí)現(xiàn)轉(zhuǎn)發(fā)時(shí),把數(shù)據(jù)通過(guò)request對(duì)象帶給其它web資源處理。setAttribute方法 getAttribute方法 removeAttribute方法getAttributeNames方法北京傳智播客教育 轉(zhuǎn)發(fā)和包含一個(gè)Servlet對(duì)象無(wú)法獲得另一個(gè)Servelt對(duì)象的引用;如果需要多個(gè)Servet組件共同協(xié)作(數(shù)據(jù)傳遞),只能使用Servelt規(guī)范為我們提
14、供的兩種方式:請(qǐng)求轉(zhuǎn)發(fā):Servlet(源組件)先對(duì)客戶請(qǐng)求做一些預(yù)處理操作,然后把請(qǐng)求轉(zhuǎn)發(fā)給其他web組件(目標(biāo)組件)來(lái)完成包括生成響應(yīng)結(jié)果在內(nèi)的后續(xù)操作。包含:Servelt(源組件)把其他web組件(目標(biāo)組件)生成的響應(yīng)結(jié)果包含到自身的響應(yīng)結(jié)果中。轉(zhuǎn)發(fā)和請(qǐng)求的共同點(diǎn)源組件和目標(biāo)組件處理的都是同一個(gè)客戶請(qǐng)求,源組件和目標(biāo)組件共享同一個(gè)ServeltRequest和ServletResponse對(duì)象目標(biāo)組件都可以為Servlet、JSP或HTML文檔都依賴 javax.servlet.RequestDispatcher接口北京傳智播客教育 RequestDispather表示請(qǐng)求分發(fā)器,它有
15、兩個(gè)方法:forward():把請(qǐng)求轉(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對(duì)象1、Servlet
16、Context對(duì)象的getRequestDispather(String path1)path1必須用絕對(duì)路徑,即以”/”開(kāi)頭,若用相對(duì)路徑會(huì)拋出異常IllegalArgumentException2、ServletRequest對(duì)象的getRequestDispatcher(String path2)path2可以用絕對(duì)路徑也可以用相對(duì)路徑北京傳智播客教育 轉(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ā)送給客戶端。特點(diǎn):1、由于forward()方法先清空用于存放響應(yīng)正文數(shù)據(jù)的緩沖區(qū),因此源組件生成的響應(yīng)結(jié)果不會(huì)被發(fā)送到客戶端,只有目標(biāo)組件生成的響應(yīng)結(jié)果才會(huì)被送到客戶端。2、如果源組件在進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)之前,已經(jīng)提交了響應(yīng)結(jié)果(如調(diào)用了response的flush或close方法),那么forward()方法會(huì)拋出IllegalStateException。為了避免該異常,不應(yīng)該在源組件中提交響應(yīng)結(jié)果。北京傳智播客教育 請(qǐng)求轉(zhuǎn)發(fā)的運(yùn)行流程北京傳智播客教育 包含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ù)代碼塊。特點(diǎn):1、源組件與被包含的目標(biāo)組件的輸出數(shù)據(jù)都會(huì)被添加到響應(yīng)結(jié)果中。2、在目標(biāo)組件中對(duì)響應(yīng)狀態(tài)代碼或者響應(yīng)頭所做的修改都會(huì)被忽略。北京傳智播客教育 請(qǐng)求范圍web應(yīng)用范圍內(nèi)的共享數(shù)據(jù)作為ServeltContext對(duì)象的屬性而存在(setAttribute),只要共享ServletContext對(duì)象也就共享了其數(shù)據(jù)。請(qǐng)求范圍內(nèi)的共享數(shù)據(jù)作為ServletRequest對(duì)象的屬性而存在(setAttribute),只要共享ServletRequest對(duì)象也就共享了其數(shù)據(jù)。北京傳智播客教育 重定向重定向機(jī)制的運(yùn)作流程1、用戶在瀏覽器端輸入特定URL,請(qǐng)求訪問(wèn)服務(wù)器端的某個(gè)組件2、服務(wù)器端的組件返回一個(gè)狀態(tài)碼為302的響應(yīng)結(jié)果。3、當(dāng)瀏覽器端接收到這種響應(yīng)結(jié)果后,再立即自動(dòng)請(qǐng)求訪問(wèn)另一個(gè)web組件4、瀏覽器端接收到來(lái)自另一個(gè)web組件的響應(yīng)結(jié)果。HttpServeltResponse的sendRedirect(String location)用于重定向北京傳智播客教育 重定向特點(diǎn)Servlet源組件生成的響應(yīng)結(jié)果不會(huì)被發(fā)送到客戶端。response.s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度出租車承包運(yùn)營(yíng)人力資源配置合同3篇
- 2025年度智能電網(wǎng)建設(shè)與運(yùn)營(yíng)管理協(xié)議4篇
- 2025年度數(shù)字化車間承包經(jīng)營(yíng)合作協(xié)議4篇
- 方形母端快接式端子行業(yè)深度研究報(bào)告
- 2025年叉車電器項(xiàng)目可行性研究報(bào)告
- 2025年度個(gè)人股權(quán)分割與轉(zhuǎn)讓合同范本3篇
- 2025年度個(gè)人心理咨詢服務(wù)合同范本4篇
- 2025年度個(gè)人房源信息在線交易安全保障協(xié)議4篇
- 2025年江蘇國(guó)經(jīng)控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年福建中閩海上風(fēng)電有限公司招聘筆試參考題庫(kù)含答案解析
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級(jí)認(rèn)證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國(guó)電子學(xué)會(huì)青少年軟件編程等級(jí)考試標(biāo)準(zhǔn)python三級(jí)練習(xí)
- 公益慈善機(jī)構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報(bào)告
- 飼料廠現(xiàn)場(chǎng)管理類隱患排查治理清單
- 2024年公需科目培訓(xùn)考試題及答案
- 【名著閱讀】《紅巖》30題(附答案解析)
- Starter Unit 2 同步練習(xí)人教版2024七年級(jí)英語(yǔ)上冊(cè)
- 分?jǐn)?shù)的加法、減法、乘法和除法運(yùn)算規(guī)律
- 2024年江蘇鑫財(cái)國(guó)有資產(chǎn)運(yùn)營(yíng)有限公司招聘筆試沖刺題(帶答案解析)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案
評(píng)論
0/150
提交評(píng)論