RequestResponse編程.ppt_第1頁
RequestResponse編程.ppt_第2頁
RequestResponse編程.ppt_第3頁
RequestResponse編程.ppt_第4頁
RequestResponse編程.ppt_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

北京傳智播客教育 ,RequestResponse,樸乾,北京傳智播客教育 ,簡介,Web服務(wù)器收到客戶端的http請求,會針對每一次請求,分別創(chuàng)建一個(gè)用于代表請求的request對象、和代表響應(yīng)的response對象 request和response對象即然代表請求和響應(yīng),那我們要獲取客戶機(jī)提交過來的數(shù)據(jù),只需要找request對象就行了。要向客戶機(jī)輸出數(shù)據(jù),只需要找response對象就行了,北京傳智播客教育 ,HttpServletResponse,HttpServletResponse對象服務(wù)器的響應(yīng)。而HTTP協(xié)議規(guī)定一個(gè)HTTP響分為狀態(tài)行、響應(yīng)頭、實(shí)體內(nèi)容三個(gè)部分。于是對象中封裝了向客戶端發(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ò)碼表就會有亂碼問題,瀏覽器默認(rèn)用平臺碼表打開。 response.setHeader(“content-type“, “text/html;charset=utf-8“); *多學(xué)一點(diǎn):可以在html中用來模擬響應(yīng)頭信息 方法二:用getWriter()獲得一個(gè)PrintWriter字符輸出流輸出數(shù)據(jù) response會默認(rèn)以ISO8859-1將需要輸出到瀏覽器的字符進(jìn)行解碼,如果輸出的字符在IOS8859-1中不存在,就會導(dǎo)致亂碼問題??梢允褂胹etCharacterEncoding(String charset)方法設(shè)置解碼用的字符集為其他字 *response.setContetnType(“text/html;charset=utf-8“);方法可以同時(shí)設(shè)定response所使用的字符集編碼和瀏覽器打開所用的字符集編碼。,北京傳智播客教育 ,案例二: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)頁面的定時(shí)刷新功能。 refresh頭可以被設(shè)置為一個(gè)整數(shù),實(shí)現(xiàn)定是刷新當(dāng)前頁面,也可以在整數(shù)后跟分號再在分好后寫一個(gè)URL指定刷新到的目標(biāo)URL 很多網(wǎng)站在提示登錄成功后幾秒內(nèi)會跳轉(zhuǎn)到主頁,就是由這個(gè)功能實(shí)現(xiàn)的。,北京傳智播客教育 ,案例四:控制是否緩存資源,利用response設(shè)置expires響應(yīng)頭為0或-1瀏覽器就不會緩存當(dāng)前資源。(同樣功能的頭還有Cache-Control: no-cache、Pragma: no-cach) 實(shí)驗(yàn):使瀏覽器每次都重新獲取圖片 expires也可以取值為一個(gè)時(shí)間,指定要緩存到的日期。 實(shí)驗(yàn):文件緩存日期檢查,北京傳智播客教育 ,案例五:response實(shí)現(xiàn)請求重定向,利用response設(shè)置狀態(tài)碼為302,并設(shè)置響應(yīng)頭Location為要重定向到的地址,就可以實(shí)現(xiàn)請求重定向操作了。 為了方便進(jìn)行請求重定向操作,response提供了response.setRedirec(“);實(shí)現(xiàn)請求重定向。 在大部分情況下請求重定向和轉(zhuǎn)發(fā)的效果是差不多的,這時(shí)候我們推薦使用轉(zhuǎn)發(fā),以減少對服務(wù)器的訪問。 而在某些情況下是需要使用轉(zhuǎn)發(fā)的,目的往往是為了改變?yōu)g覽器地址欄里的地址(如登錄成功后轉(zhuǎn)到主頁),和更改刷新操作(如加入商品到購物車后轉(zhuǎn)到購物車頁面的操作),北京傳智播客教育 ,*案例六:輸出驗(yàn)證碼圖片,建立BufferedImage對象:指定圖片的長度寬度和類型 BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); 取得Graphics對象,用來繪制圖片 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ù) 前閉后開 繪制干擾線 graphics.drawLine(x1, y1, x2, y2);,北京傳智播客教育 ,*案例六:輸出驗(yàn)證碼圖片,設(shè)置字體 graphics.setFont(new Font(“宋體, Font.PLAIN, 18); 如果驗(yàn)證碼是中文,要使用中文的字體庫 通過詞庫生成隨機(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(); 通過ImageIO對象的write靜態(tài)方法將圖片輸出 ImageIO. (image, “jpg“, resp.getOutputStream();,北京傳智播客教育 ,response生成響應(yīng)注意事項(xiàng),getOutputStream和getWriter這兩個(gè)方法互相排斥,調(diào)用了其中的任何一個(gè)方法后,就不能再調(diào)用另一方法。 Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數(shù)據(jù)將被Servlet引擎從response里面獲取,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引擎tomcat將調(diào)用close方法關(guān)閉該輸出流對象。,北京傳智播客教育 ,HttpServletRequest,樸乾,北京傳智播客教育 ,HttpServletRequest,HttpServletRequest對象代表客戶端的請求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時(shí),HTTP請求中的所有信息都封裝在這個(gè)對象中,開發(fā)人員通過這個(gè)對象的方法,可以獲得客戶這些信息。 通過Request對象進(jìn)行的常用操作 獲取客戶機(jī)信息 獲取請求頭信息 獲取請求參數(shù) 利用請求域傳遞對象,北京傳智播客教育 ,request獲取客戶機(jī)信息,getRequestURL方法返回客戶端發(fā)出請求完整URL getRequestURI方法返回請求行中的資源名部分 getQueryString 方法返回請求行中的參數(shù)部分 getRemoteAddr方法返回發(fā)出請求的客戶機(jī)的IP地址 getMethod得到客戶機(jī)請求方式 getContextPath 獲得當(dāng)前web應(yīng)用虛擬目錄名稱,北京傳智播客教育 ,request獲取請求頭信息,獲得客戶機(jī)請求頭 getHeader(name)方法 - String getHeaders(String name)方法 - Enumeration getHeaderNames方法 - Enumeration 獲得具體類型客戶機(jī)請求頭 getIntHead(name)方法 - int getDateHead(name)方法 - long(日期對應(yīng)毫秒) 案例:通過referer信息防盜鏈,北京傳智播客教育 ,request獲取請求參數(shù),getParameter(name) - String 通過name獲得值 getParameterValues - String 通過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利用請求域傳遞對象,request對象同時(shí)也是一個(gè)域?qū)ο?,開發(fā)人員通過request對象在實(shí)現(xiàn)轉(zhuǎn)發(fā)時(shí),把數(shù)據(jù)通過request對象帶給其它web資源處理 setAttribute方法 getAttribute方法 removeAttribute方法 getAttributeNames方法 request作用域的作用范圍 在請求轉(zhuǎn)發(fā)時(shí)傳遞數(shù)據(jù),北京傳智播客教育 ,request實(shí)現(xiàn)請求轉(zhuǎn)發(fā),request對象提供了一個(gè)getRequestDispatcher方法,該方法返回一個(gè)RequestDispatcher對象,調(diào)用這個(gè)對象的forward方法可以實(shí)現(xiàn)請求轉(zhuǎn)發(fā),從而共享請求中的數(shù)據(jù) 如果在調(diào)用forward方法之前向servlet程序中寫入的部分內(nèi)容已經(jīng)被真正的傳送到了客戶端,forward將不能進(jìn)行,會拋出異常。 如果在調(diào)用forward之前向response緩沖區(qū)中寫入了內(nèi)容,只要寫入到其中的內(nèi)容還沒有真的被輸出到客戶端,forward方法就可以正常執(zhí)行,但原來寫入到緩沖區(qū)中的數(shù)據(jù)將被清空,注意只是實(shí)體內(nèi)容被清空,之前寫入的響應(yīng)頭信息仍然存在。,北京傳智播客教育 ,請求重定向和請求轉(zhuǎn)發(fā)的區(qū)別,RequestDispatcher.forward方法只能將請求轉(zhuǎn)發(fā)給同一個(gè)WEB應(yīng)用中的組件;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點(diǎn)的資源。 如果傳遞給HttpServletResponse.sendRedirect 方法的相對URL以“/”開頭,它是相對于服務(wù)器的根目錄;如果創(chuàng)建RequestDispatcher對象時(shí)指定的相對URL以“/”開頭,它是相對于當(dāng)前WEB應(yīng)用程序的根目錄。 調(diào)用HttpServletResponse.sendRedirect方法重定向的訪問過程結(jié)束后,瀏覽器地址欄中顯示的URL會發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;調(diào)用RequestDispatcher.forward 方法的請求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。 HttpServletResponse.sendRedirect方法對瀏覽器的請求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對另外一個(gè)URL的訪問請求;RequestDispatcher.forward方法在服務(wù)器端內(nèi)部將請求轉(zhuǎn)發(fā)給另外一個(gè)資源,瀏覽器只知道發(fā)出了請求并得到了響應(yīng)結(jié)果,并不知道在服務(wù)器程序內(nèi)部發(fā)生了轉(zhuǎn)發(fā)行為。 RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個(gè)訪問請求和響應(yīng)過程;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個(gè)獨(dú)立的訪問請求和響應(yīng)過程。,北京傳智播客教育 ,RequestDispatcher進(jìn)行include操作,include方法: RequestDispatcher.include方法用于將RequestDispatcher對象封裝的資源內(nèi)容作為當(dāng)前響應(yīng)內(nèi)容的一部分包含進(jìn)來,從而實(shí)現(xiàn)可編程的服務(wù)器端包含功能 被包含的Servlet程序不能改變響應(yīng)消息的狀態(tài)碼和響應(yīng)頭,如果它里

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論