




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京傳智播客教育WebServlet增強(qiáng)袁杰北京傳智播客教育主要內(nèi)容配置文件讀取(properties)ServletContext路徑:相對(duì)、絕對(duì)HttpServletResponseHttpServletRequest北京傳智播客教育request,session,context三個(gè)域?qū)ο螅喝齻€(gè)對(duì)像,也被稱(chēng)為域?qū)ο?。用于保存用戶的信息。request–用戶請(qǐng)求Servlet,當(dāng)請(qǐng)求結(jié)束時(shí)request即消失。類(lèi):HttpServletRequestsession–為每一個(gè)瀏覽器創(chuàng)建一個(gè)獨(dú)有的會(huì)話,當(dāng)前用戶在任意Servlet的都可以獲取自己保存的數(shù)據(jù)。類(lèi):HttpSession。獲取HttpSession的方式:httpServletRequest.getSession();每一個(gè)HttpSession都擁有自己的唯一ID值。context-一個(gè)應(yīng)用,擁有唯一的一個(gè)ServletContext對(duì)像,訪問(wèn)此應(yīng)用的任何瀏覽器,共享一個(gè)ServletContext.獲取方式:getServletContext()
以上三個(gè)對(duì)像,都具有以下兩個(gè)方法setAttribute(key,value)–用于將數(shù)據(jù)存在此范圍內(nèi)。getAttribute(key)–用于從某個(gè)范圍中取出數(shù)據(jù)。北京傳智播客教育四大作用域--示意圖:以下圖示只表示它們的大小范圍,關(guān)不意味它們之間存在包含關(guān)系:ServletContextHttpSessionHttpServletRequestPageContext北京傳智播客教育HttpServletResponse袁杰北京傳智播客教育簡(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)碼的方法。北京傳智播客教育HttpServletResponse北京傳智播客教育response指定狀態(tài)碼&頭信息狀態(tài)碼(StatusCode)setStatus(int)常用狀態(tài)碼:200、302、304、404、500頭信息(HeaderInfo)addHeader(String,String)setHeader(String,String)北京傳智播客教育response生成響應(yīng)獲得向客戶端進(jìn)行數(shù)據(jù)輸出的流對(duì)象字節(jié)流數(shù)據(jù)輸出OutputStreamout=response.getOutputStream();字符流數(shù)據(jù)輸出PrintWriterpw=response.getWriter();指定body內(nèi)容的類(lèi)型setContentType("text/html")指定輸出數(shù)據(jù)的編碼格式setCharacterEncoding("gb2312");默認(rèn)情況下,編碼格式是ISO-8859-1北京傳智播客教育response常見(jiàn)應(yīng)用向客戶端輸出中文數(shù)據(jù)分別以O(shè)utputStream和PrintWriter輸出多學(xué)一招:使用HTML語(yǔ)言里面的<meta>標(biāo)簽來(lái)控制瀏覽器行為思考:用OutputStream輸出1,為什么用戶看到的不是1?文件下載和中文文件的下載輸出驗(yàn)證碼圖片發(fā)送http頭,控制瀏覽器定時(shí)刷新網(wǎng)頁(yè)(refresh)發(fā)送http頭,控制瀏覽器禁止緩存當(dāng)前文檔內(nèi)容(expires)北京傳智播客教育輸出驗(yàn)證碼圖片建立BufferedImage對(duì)象:指定圖片的長(zhǎng)度寬度和類(lèi)型BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);取得Graphics對(duì)象,用來(lái)繪制圖片
Graphicsgraphics=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ù)Randomrandom=newRandom();random.nextInt(n);//生成0到n的隨機(jī)數(shù)前閉后開(kāi)繪制干擾線graphics.drawLine(x1,y1,x2,y2);北京傳智播客教育輸出驗(yàn)證碼圖片設(shè)置字體
graphics.setFont(newFont("TimesNewRoman",Font.PLAIN,18));通過(guò)詞庫(kù)生成隨機(jī)驗(yàn)證碼內(nèi)容(native2ascii)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";漢字:\u4e00——\u9fa5graphics.drawString(str,x,y);設(shè)置旋轉(zhuǎn)Graphics2Dgraphics=(Graphics2D)image.getGraphics();graphics.rotate(theta,x,y);釋放此圖形的上下文以及它使用的所有系統(tǒng)資源
graphics.dispose();通過(guò)ImageIO對(duì)象的write靜態(tài)方法將圖片輸出
ImageIO.write(image,"jpg",resp.getOutputStream());北京傳智播客教育response實(shí)現(xiàn)重定向通過(guò)response實(shí)現(xiàn)請(qǐng)求重定向。請(qǐng)求重定向指:一個(gè)web資源收到客戶端請(qǐng)求后,通知客戶端去訪問(wèn)另外一個(gè)web資源,這稱(chēng)之為請(qǐng)求重定向。應(yīng)用場(chǎng)景:用戶登陸實(shí)現(xiàn)方式response.sendRedirect()實(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)用另一方法。Servlet程序向ServletOutputStream或PrintWriter對(duì)象中寫(xiě)入的數(shù)據(jù)將被Servlet引擎從response里面獲取,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ì)象。
調(diào)用close的時(shí)候,應(yīng)該會(huì)調(diào)用flushBuffer
北京傳智播客教育HttpServletRequest袁杰北京傳智播客教育HttpServletRequestHttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過(guò)HTTP協(xié)議訪問(wèn)服務(wù)器時(shí),HTTP請(qǐng)求中的所有信息都封裝在這個(gè)對(duì)象中,開(kāi)發(fā)人員通過(guò)這個(gè)對(duì)象的方法,可以獲得客戶這些信息。通過(guò)Request對(duì)象進(jìn)行的常用操作獲取客戶機(jī)信息獲取請(qǐng)求頭信息獲取請(qǐng)求參數(shù)利用請(qǐng)求域傳遞對(duì)象北京傳智播客教育HttpServletRequest北京傳智播客教育request獲取客戶機(jī)信息getRequestURL方法返回客戶端發(fā)出請(qǐng)求時(shí)的完整URLgetRequestURI方法返回請(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ī)名getMethod得到客戶機(jī)請(qǐng)求方式北京傳智播客教育request獲取請(qǐng)求頭信息獲得客戶機(jī)請(qǐng)求頭getHeader(name)方法StringgetHeaders(Stringname)方法Enumeration<String>getHeaderNames方法Enumeration<String>獲得具體類(lèi)型客戶機(jī)請(qǐng)求頭getIntHead(name)方法intgetDateHead(name)方法long(日期對(duì)應(yīng)毫秒)北京傳智播客教育request獲取請(qǐng)求參數(shù)getParameter(name)String通過(guò)name獲得值getParameterValuesString[]通過(guò)name獲得多值getParameterNamesEnumeration<String>獲得所有namegetParameterMapMap<String,String[]>key:namevalue:多值數(shù)據(jù)非空校驗(yàn)處理中文亂碼postsetCharacterEncoding//放在getParameter前才有效getnewString(str.getBytes(“ISO-8859-1”),”utf-8”)設(shè)置tomcatConnectorURIEncoding=“utf-8”北京傳智播客教育URL特殊字符轉(zhuǎn)義規(guī)則常用轉(zhuǎn)義規(guī)則空格換成加號(hào)(+)+換成%2B正斜杠(/)分隔目錄和子目錄換成%2F問(wèn)號(hào)(?)分隔URL和查詢換成%3F百分號(hào)(%)制定特殊字符換成%25#號(hào)指定書(shū)簽換成%23&號(hào)分隔參數(shù)換成%26.URLEncoder和.URLDecoder北京傳智播客教育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對(duì)象提供了一個(gè)getRequestDispatcher方法,該方法返回一個(gè)RequestDispatcher對(duì)象,調(diào)用這個(gè)對(duì)象的forward方法可以實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),從而共享請(qǐng)求中的數(shù)據(jù)北京傳智播客教育請(qǐng)求轉(zhuǎn)發(fā)的細(xì)節(jié)
forward方法用于將請(qǐng)求轉(zhuǎn)發(fā)到RequestDispatcher對(duì)象封裝的資源。如果在調(diào)用forward方法之前,在Servlet程序中寫(xiě)入的部分內(nèi)容已經(jīng)被真正地傳送到了客戶端isCommitedtrue,forward方法將拋出IllegalStateException異常如果在調(diào)用forward方法之前向Servlet引擎的緩沖區(qū)(response)中寫(xiě)入了內(nèi)容,只要寫(xiě)入到緩沖區(qū)中的內(nèi)容還沒(méi)有被真正輸出到客戶端isCommitedfalse,forward方法就可以被正常執(zhí)行,原來(lái)寫(xiě)入到輸出緩沖區(qū)中的內(nèi)容將被清空resetBuffer,但是,已寫(xiě)入到HttpServletResponse對(duì)象中的響應(yīng)頭字段信息保持有效。北京傳智播客教育請(qǐng)求轉(zhuǎn)發(fā)的運(yùn)行流程(課后看)北京傳智播客教育請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)的區(qū)別
一個(gè)web資源收到客戶端請(qǐng)求后,通知服務(wù)器去調(diào)用另外一個(gè)web資源進(jìn)行處理(服務(wù)器內(nèi)部的調(diào)用),稱(chēng)之為請(qǐng)求轉(zhuǎn)發(fā)一個(gè)web資源收到客戶端請(qǐng)求后,通知瀏覽器去訪問(wèn)另外一個(gè)web資源(瀏覽器進(jìn)行2次請(qǐng)求),稱(chēng)之為請(qǐng)求重定向北京傳智播客教育轉(zhuǎn)發(fā)vs.重定向可以通過(guò)兩種方式得到RequestDispatcherServletContext.getRequestDispatcher(Stringpath);
其中這里的path必須開(kāi)始為"/",即這里的path必須相對(duì)于context的root.ServeltRequest.getRequestDispatcher(Stringpath);
這里的path可以為相對(duì)路徑,如果path開(kāi)始為“/”,則也認(rèn)為是從context的root開(kāi)始的。重定向RedirectHttpServletResponse.sendRedirect(Stringlocation)北京傳智播客教育請(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ì)于整個(gè)WEB站點(diǎn)的根目錄;如果創(chuàng)建RequestDispatcher對(duì)象時(shí)指定的相對(duì)URL以“/”開(kāi)頭,它是相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄。調(diào)用HttpServletResponse.sendRedirect方法重定向的訪問(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)的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 26315-2025市場(chǎng)、民意和社會(huì)調(diào)查術(shù)語(yǔ)
- GB/T 17934.6-2025印刷技術(shù)網(wǎng)目調(diào)分色版、樣張和生產(chǎn)印刷品的加工過(guò)程控制第6部分:柔性版印刷
- TD/T 1017-2008第二次全國(guó)土地調(diào)查基本農(nóng)田調(diào)查技術(shù)規(guī)程
- JJG(煙草)01-2012卷煙和濾棒物理性能綜合測(cè)試臺(tái)檢定規(guī)程
- JJF(煙草)4.5-2024煙草及煙草制品連續(xù)流動(dòng)法測(cè)定常規(guī)化學(xué)成分測(cè)量不確定度評(píng)定指南第5部分:鉀
- 2025初三升高一數(shù)學(xué)暑假銜接講義25講含答案(必修一內(nèi)容)3.4 冪函數(shù)-(必修第一冊(cè))
- 南山實(shí)驗(yàn)教育集團(tuán)2025年中考語(yǔ)文一模試卷
- 2004年江蘇省淮安市中考數(shù)學(xué)真題【含答案、解析】
- 考研復(fù)習(xí)-風(fēng)景園林基礎(chǔ)考研試題附參考答案詳解【輕巧奪冠】
- 考研復(fù)習(xí)-風(fēng)景園林基礎(chǔ)考研試題(預(yù)熱題)附答案詳解
- 土方回填施工及揚(yáng)塵治理方案
- 高級(jí)英語(yǔ)I(下)-華東理工大學(xué)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋華東理工大學(xué)
- 地震災(zāi)害培訓(xùn)課件
- 2024年新疆維吾爾自治區(qū)中考英語(yǔ)真題含解析
- 2025水利云播五大員考試題庫(kù)(含答案)
- 文書(shū)模板-《因病申請(qǐng)低保申請(qǐng)書(shū)》
- 《分層裝配支撐鋼框架房屋技術(shù)規(guī)程》
- 陜西省2025屆高考數(shù)學(xué)押題試卷含解析
- 中國(guó)科學(xué)院大學(xué)《模式識(shí)別與機(jī)器學(xué)習(xí)》2023-2024學(xué)年第一學(xué)期期末試卷
- 視唱練耳知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋四川音樂(lè)學(xué)院
- 手術(shù)室護(hù)理質(zhì)量控制指標(biāo)
評(píng)論
0/150
提交評(píng)論