




已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京傳智播客教育 ,RequestResponse,樸乾,北京傳智播客教育 ,簡(jiǎn)介,Web服務(wù)器收到客戶(hù)端的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),那我們要獲取客戶(hù)機(jī)提交過(guò)來(lái)的數(shù)據(jù),只需要找request對(duì)象就行了。要向客戶(hù)機(jī)輸出數(shù)據(jù),只需要找response對(duì)象就行了,北京傳智播客教育 ,HttpServletResponse,HttpServletResponse對(duì)象服務(wù)器的響應(yīng)。而HTTP協(xié)議規(guī)定一個(gè)HTTP響分為狀態(tài)行、響應(yīng)頭、實(shí)體內(nèi)容三個(gè)部分。于是對(duì)象中封裝了向客戶(hù)端發(fā)送響應(yīng)狀態(tài)碼、響應(yīng)頭、實(shí)體數(shù)據(jù)的方法。(課后翻看api)。,北京傳智播客教育 ,案例一:向?yàn)g覽器輸出一段數(shù)據(jù),方法一:用getOutputStream() 獲得一個(gè)ServletOutputStream 字節(jié)流輸出數(shù)據(jù) 此方法按字節(jié)輸出數(shù)據(jù),如果輸出的數(shù)據(jù)是表示一段字符的字節(jié)數(shù)據(jù),則一定要指定瀏覽器以什么碼表解碼,如果指定錯(cuò)碼表就會(huì)有亂碼問(wèn)題,瀏覽器默認(rèn)用平臺(tái)碼表打開(kāi)。 response.setHeader(“content-type“, “text/html;charset=utf-8“); *多學(xué)一點(diǎn):可以在html中用來(lái)模擬響應(yīng)頭信息 方法二:用getWriter()獲得一個(gè)PrintWriter字符輸出流輸出數(shù)據(jù) response會(huì)默認(rèn)以ISO8859-1將需要輸出到瀏覽器的字符進(jìn)行解碼,如果輸出的字符在IOS8859-1中不存在,就會(huì)導(dǎo)致亂碼問(wèn)題。可以使用setCharacterEncoding(String charset)方法設(shè)置解碼用的字符集為其他字 *response.setContetnType(“text/html;charset=utf-8“);方法可以同時(shí)設(shè)定response所使用的字符集編碼和瀏覽器打開(kāi)所用的字符集編碼。,北京傳智播客教育 ,案例二:response實(shí)現(xiàn)文件下載,利用response將HTTP的響應(yīng)頭“content-disposition“設(shè)置為“attachment;filename=xxx“即可實(shí)現(xiàn)文件下載功能 如果文件名中包含中文,則文件名要進(jìn)行URL編碼,URLEncoding.encode(啊啊.jpg,utf-8);如果不進(jìn)行編碼則文件名顯示錯(cuò)誤并且不可下載。,北京傳智播客教育 ,案例三:refresh控制定時(shí)刷新,利用Response設(shè)置響應(yīng)頭refresh可以實(shí)現(xiàn)頁(yè)面的定時(shí)刷新功能。 refresh頭可以被設(shè)置為一個(gè)整數(shù),實(shí)現(xiàn)定是刷新當(dāng)前頁(yè)面,也可以在整數(shù)后跟分號(hào)再在分好后寫(xiě)一個(gè)URL指定刷新到的目標(biāo)URL 很多網(wǎng)站在提示登錄成功后幾秒內(nèi)會(huì)跳轉(zhuǎn)到主頁(yè),就是由這個(gè)功能實(shí)現(xiàn)的。,北京傳智播客教育 ,案例四:控制是否緩存資源,利用response設(shè)置expires響應(yīng)頭為0或-1瀏覽器就不會(huì)緩存當(dāng)前資源。(同樣功能的頭還有Cache-Control: no-cache、Pragma: no-cach) 實(shí)驗(yàn):使瀏覽器每次都重新獲取圖片 expires也可以取值為一個(gè)時(shí)間,指定要緩存到的日期。 實(shí)驗(yàn):文件緩存日期檢查,北京傳智播客教育 ,案例五:response實(shí)現(xiàn)請(qǐng)求重定向,利用response設(shè)置狀態(tài)碼為302,并設(shè)置響應(yīng)頭Location為要重定向到的地址,就可以實(shí)現(xiàn)請(qǐng)求重定向操作了。 為了方便進(jìn)行請(qǐng)求重定向操作,response提供了response.setRedirec(“);實(shí)現(xiàn)請(qǐng)求重定向。 在大部分情況下請(qǐng)求重定向和轉(zhuǎn)發(fā)的效果是差不多的,這時(shí)候我們推薦使用轉(zhuǎn)發(fā),以減少對(duì)服務(wù)器的訪(fǎng)問(wèn)。 而在某些情況下是需要使用轉(zhuǎn)發(fā)的,目的往往是為了改變?yōu)g覽器地址欄里的地址(如登錄成功后轉(zhuǎn)到主頁(yè)),和更改刷新操作(如加入商品到購(gòu)物車(chē)后轉(zhuǎn)到購(gòu)物車(chē)頁(yè)面的操作),北京傳智播客教育 ,*案例六:輸出驗(yàn)證碼圖片,建立BufferedImage對(duì)象:指定圖片的長(zhǎng)度寬度和類(lèi)型 BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); 取得Graphics對(duì)象,用來(lái)繪制圖片 Graphics graphics = image.getGraphics(); 繪制背景顏色 graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, width, height); 繪制邊界 graphics.setColor(Color.BLUE); graphics.drawRect(0, 0, width - 1, height - 1); 生成隨機(jī)數(shù) Random random = new Random(); random.nextInt(n); / 生成0 到 n的隨機(jī)數(shù) 前閉后開(kāi) 繪制干擾線(xiàn) graphics.drawLine(x1, y1, x2, y2);,北京傳智播客教育 ,*案例六:輸出驗(yàn)證碼圖片,設(shè)置字體 graphics.setFont(new Font(“宋體, Font.PLAIN, 18); 如果驗(yàn)證碼是中文,要使用中文的字體庫(kù) 通過(guò)詞庫(kù)生成隨機(jī)驗(yàn)證碼內(nèi)容 “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890“; 漢字:u4e00 u9fa5 graphics.drawString(str, x, y); 設(shè)置旋轉(zhuǎn) Graphics2D graphics = (Graphics2D) image.getGraphics(); graphics.rotate(theta, x, y); 釋放此圖形的上下文以及它使用的所有系統(tǒng)資源 graphics.dispose(); 通過(guò)ImageIO對(duì)象的write靜態(tài)方法將圖片輸出 ImageIO. (image, “jpg“, resp.getOutputStream();,北京傳智播客教育 ,response生成響應(yīng)注意事項(xiàng),getOutputStream和getWriter這兩個(gè)方法互相排斥,調(diào)用了其中的任何一個(gè)方法后,就不能再調(diào)用另一方法。 Servlet程序向ServletOutputStream或PrintWriter對(duì)象中寫(xiě)入的數(shù)據(jù)將被Servlet引擎從response里面獲取,Servlet引擎將這些數(shù)據(jù)當(dāng)作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶(hù)端。 Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對(duì)象是否已經(jīng)調(diào)用過(guò)close方法,如果沒(méi)有,Servlet引擎tomcat將調(diào)用close方法關(guān)閉該輸出流對(duì)象。,北京傳智播客教育 ,HttpServletRequest,樸乾,北京傳智播客教育 ,HttpServletRequest,HttpServletRequest對(duì)象代表客戶(hù)端的請(qǐng)求,當(dāng)客戶(hù)端通過(guò)HTTP協(xié)議訪(fǎng)問(wèn)服務(wù)器時(shí),HTTP請(qǐng)求中的所有信息都封裝在這個(gè)對(duì)象中,開(kāi)發(fā)人員通過(guò)這個(gè)對(duì)象的方法,可以獲得客戶(hù)這些信息。 通過(guò)Request對(duì)象進(jìn)行的常用操作 獲取客戶(hù)機(jī)信息 獲取請(qǐng)求頭信息 獲取請(qǐng)求參數(shù) 利用請(qǐng)求域傳遞對(duì)象,北京傳智播客教育 ,request獲取客戶(hù)機(jī)信息,getRequestURL方法返回客戶(hù)端發(fā)出請(qǐng)求完整URL getRequestURI方法返回請(qǐng)求行中的資源名部分 getQueryString 方法返回請(qǐng)求行中的參數(shù)部分 getRemoteAddr方法返回發(fā)出請(qǐng)求的客戶(hù)機(jī)的IP地址 getMethod得到客戶(hù)機(jī)請(qǐng)求方式 getContextPath 獲得當(dāng)前web應(yīng)用虛擬目錄名稱(chēng),北京傳智播客教育 ,request獲取請(qǐng)求頭信息,獲得客戶(hù)機(jī)請(qǐng)求頭 getHeader(name)方法 - String getHeaders(String name)方法 - Enumeration getHeaderNames方法 - Enumeration 獲得具體類(lèi)型客戶(hù)機(jī)請(qǐng)求頭 getIntHead(name)方法 - int getDateHead(name)方法 - long(日期對(duì)應(yīng)毫秒) 案例:通過(guò)referer信息防盜鏈,北京傳智播客教育 ,request獲取請(qǐng)求參數(shù),getParameter(name) - String 通過(guò)name獲得值 getParameterValues - String 通過(guò)name獲得多值 checkbox getParameterNames - Enumeration 獲得所有name getParameterMap - Map key :name value: 多值 數(shù)據(jù)非空校驗(yàn) 處理中文亂碼 post setCharacterEncoding /放在getParameter前才有效 get new String(str.getBytes(“ISO-8859-1”),”utf-8”) 設(shè)置tomcat Connector URIEncoding=“utf-8”,北京傳智播客教育 ,request利用請(qǐng)求域傳遞對(duì)象,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方法 request作用域的作用范圍 在請(qǐng)求轉(zhuǎn)發(fā)時(shí)傳遞數(shù)據(jù),北京傳智播客教育 ,request實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),request對(duì)象提供了一個(gè)getRequestDispatcher方法,該方法返回一個(gè)RequestDispatcher對(duì)象,調(diào)用這個(gè)對(duì)象的forward方法可以實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),從而共享請(qǐng)求中的數(shù)據(jù) 如果在調(diào)用forward方法之前向servlet程序中寫(xiě)入的部分內(nèi)容已經(jīng)被真正的傳送到了客戶(hù)端,forward將不能進(jìn)行,會(huì)拋出異常。 如果在調(diào)用forward之前向response緩沖區(qū)中寫(xiě)入了內(nèi)容,只要寫(xiě)入到其中的內(nèi)容還沒(méi)有真的被輸出到客戶(hù)端,forward方法就可以正常執(zhí)行,但原來(lái)寫(xiě)入到緩沖區(qū)中的數(shù)據(jù)將被清空,注意只是實(shí)體內(nèi)容被清空,之前寫(xiě)入的響應(yīng)頭信息仍然存在。,北京傳智播客教育 ,請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)的區(qū)別,RequestDispatcher.forward方法只能將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)WEB應(yīng)用中的組件;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源。 如果傳遞給HttpServletResponse.sendRedirect 方法的相對(duì)URL以“/”開(kāi)頭,它是相對(duì)于服務(wù)器的根目錄;如果創(chuàng)建RequestDispatcher對(duì)象時(shí)指定的相對(duì)URL以“/”開(kāi)頭,它是相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄。 調(diào)用HttpServletResponse.sendRedirect方法重定向的訪(fǎng)問(wèn)過(guò)程結(jié)束后,瀏覽器地址欄中顯示的URL會(huì)發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;調(diào)用RequestDispatcher.forward 方法的請(qǐng)求轉(zhuǎn)發(fā)過(guò)程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。 HttpServletResponse.sendRedirect方法對(duì)瀏覽器的請(qǐng)求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對(duì)另外一個(gè)URL的訪(fǎng)問(wèn)請(qǐng)求;RequestDispatcher.forward方法在服務(wù)器端內(nèi)部將請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源,瀏覽器只知道發(fā)出了請(qǐng)求并得到了響應(yīng)結(jié)果,并不知道在服務(wù)器程序內(nèi)部發(fā)生了轉(zhuǎn)發(fā)行為。 RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象,它們屬于同一個(gè)訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)過(guò)程;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對(duì)象和response對(duì)象,它們屬于兩個(gè)獨(dú)立的訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)過(guò)程。,北京傳智播客教育 ,RequestDispatcher進(jìn)行include操作,include方法: RequestDispatcher.include方法用于將RequestDispatcher對(duì)象封裝的資源內(nèi)容作為當(dāng)前響應(yīng)內(nèi)容的一部分包含進(jìn)來(lái),從而實(shí)現(xiàn)可編程的服務(wù)器端包含功能 被包含的Servlet程序不能改變響應(yīng)消息的狀態(tài)碼和響應(yīng)頭,如果它里
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)三足式袋卸料離心機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 深度解析教育科技行業(yè)未來(lái)發(fā)展方向
- 教育機(jī)構(gòu)如何利用游戲化平臺(tái)提高教學(xué)效果
- 企業(yè)培訓(xùn)中多媒體技術(shù)的應(yīng)用與創(chuàng)新-以智慧教室為例
- 新版培訓(xùn)課件模板圖片
- 碧桂園張家港拓客內(nèi)部培訓(xùn)89
- 全民健身設(shè)施補(bǔ)短板工程實(shí)施方案在城市老舊小區(qū)健身設(shè)施改造中的應(yīng)用研究
- 全球鈾礦資源市場(chǎng)前景與2025年核能產(chǎn)業(yè)綠色低碳發(fā)展戰(zhàn)略報(bào)告
- 公交優(yōu)先戰(zhàn)略在2025年城市交通擁堵治理中的可持續(xù)發(fā)展報(bào)告
- Carpetimycin-B-生命科學(xué)試劑-MCE
- -2024屆高考英語(yǔ)二輪復(fù)習(xí):讀后續(xù)寫(xiě)適用句型-定語(yǔ)從句課件
- 板式換熱器、半容積式換熱器換熱器面積計(jì)算表(自動(dòng)計(jì)算)
- 直流屏檢修作業(yè)指導(dǎo)書(shū)
- 冷鐓機(jī) 質(zhì)量要求技術(shù)條件
- 《全國(guó)統(tǒng)一安裝工程預(yù)算定額》工程量計(jì)算規(guī)則
- translated-NCCN臨床實(shí)踐指南:非小細(xì)胞肺癌(中文版2022.V5)
- GB/T 8312-2002茶咖啡堿測(cè)定
- 通信線(xiàn)路工程施工組織設(shè)計(jì)方案【實(shí)用文檔】doc
- 護(hù)士注冊(cè)健康體檢表下載【可直接打印版本】
- 預(yù)計(jì)財(cái)務(wù)報(bào)表編制及分析課件
- Q∕SY 1347-2010 石油化工蒸汽透平式壓縮機(jī)組節(jié)能監(jiān)測(cè)方法
評(píng)論
0/150
提交評(píng)論