java web之servlet源碼筆記編程_第1頁(yè)
java web之servlet源碼筆記編程_第2頁(yè)
java web之servlet源碼筆記編程_第3頁(yè)
java web之servlet源碼筆記編程_第4頁(yè)
java web之servlet源碼筆記編程_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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)介

1、北京傳智播客教育 Web Servlet增強(qiáng)梁 桐北京傳智播客教育 主要內(nèi)容配置文件讀取(properties)ServletContext路徑:相對(duì)、絕對(duì)HttpServletResponseHttpServletRequest北京傳智播客教育 讀取文件總結(jié)1Java項(xiàng)目web項(xiàng)目classes(src) | cn.itcastwebrootWEB-INF知識(shí)參考*.class.getClassLoader().getResourceAsStream(/);*.class.getResourceAsStream(“”),相對(duì)java.util.Properties北京傳智播客教育 讀取文件總

2、結(jié)2URL url = *.class.getResource(/);URL url2 = *. class.getResource();URL url3 = *. class.getClassLoader().getResource(/);URL url4 =*.class.getClassLoader().getResource();Java Project1、bin/ 2、bin/cn 3、null 4、bin/WebProject1、classes/ 2、classes/cn 3、classes/ 4、classes/北京傳智播客教育 request,session,context三個(gè)

3、域?qū)ο螅喝齻€(gè)對(duì)像,也被稱(chēng)為域?qū)ο瘛S糜诒4嬗脩?hù)的信息。request 用戶(hù)請(qǐng)求Servlet,當(dāng)請(qǐng)求結(jié)束時(shí)request即消失。類(lèi) : HttpServletRequestsession 為每一個(gè)瀏覽器創(chuàng)建一個(gè)獨(dú)有的會(huì)話,當(dāng)前用戶(hù)在任意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. 獲

4、取方式:getServletContext() 以上三個(gè)對(duì)像,都具有以下兩個(gè)方法setAttribute(key,value) 用于將數(shù)據(jù)存在此范圍內(nèi)。getAttribute(key) 用于從某個(gè)范圍中取出數(shù)據(jù)。北京傳智播客教育 四大作用域-示意圖:以下圖示只表示它們的大小范圍,關(guān)不意味它們之間存在包含關(guān)系:ServletContextHttpSessionHttpServletRequestPageContext北京傳智播客教育 ServletContext梁 桐北京傳智播客教育 Web應(yīng)用對(duì)象:ServletContextWEB容器在啟動(dòng)時(shí),它會(huì)為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對(duì)應(yīng)的Ser

5、vletContext對(duì)象,它代表當(dāng)前web應(yīng)用。ServletConfig對(duì)象中維護(hù)了ServletContext對(duì)象的引用.this.getServletConfig().getServletContext();this.getServletContext();由于一個(gè)WEB應(yīng)用中的所有Servlet共享同一個(gè)ServletContext對(duì)象,因此Servlet對(duì)象之間可以通過(guò)ServletContext對(duì)象來(lái)實(shí)現(xiàn)通訊。ServletContext對(duì)象通常也被稱(chēng)之為context域?qū)ο?。查看ServletContext API文檔,了解ServletContext對(duì)象的功能。北京傳智播客教

6、育 ServletContext應(yīng)用多個(gè)Servlet通過(guò)ServletContext對(duì)象實(shí)現(xiàn)數(shù)據(jù)共享servlet1-toggle attributeservlet2-get attribute獲取WEB應(yīng)用的初始化參數(shù),獲得當(dāng)前服務(wù)器信息(servlet容器),getServerInfo() 獲得WebRoot下所有的文件路徑,getResourcePaths(/)實(shí)現(xiàn)Servlet的轉(zhuǎn)發(fā),路徑必須/開(kāi)頭利用ServletContext對(duì)象讀取資源文件得到文件路徑,getRealPathJNDI(Java Naming and Directory Interface,Java命名和目錄接口

7、)是一組在Java應(yīng)用中訪問(wèn)命名和目錄服務(wù)的API讀取資源文件, getResourceAsStream北京傳智播客教育 web project讀取文件總結(jié)3文件系統(tǒng)路徑getServletContext().getRealPath(“/WEB-INF/info.txt”)getServletContext().getRealPath(“WEB-INF/info.txt”)北京傳智播客教育 一個(gè)Web開(kāi)發(fā)中的復(fù)雜問(wèn)題:路徑問(wèn)題Web系統(tǒng)中的相對(duì)路徑和絕對(duì)路徑相對(duì)路徑:hello ./hello ./myweb/hello絕對(duì)路徑:/hello /myweb/hello服務(wù)器端和客戶(hù)端對(duì)于/ 的

8、區(qū)別客戶(hù)端關(guān)于路徑問(wèn)題的編程結(jié)論*.html *.jsp 內(nèi)都使用絕對(duì)路徑*.css 內(nèi)部使用相對(duì)路徑 背景圖片*.js中使用絕對(duì)路徑北京傳智播客教育 HttpServletResponse梁 桐北京傳智播客教育 簡(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ì)象就行了北京傳智播客教育 HttpServletResponseHttpSer

9、vletResponse對(duì)象服務(wù)器的響應(yīng)。這個(gè)對(duì)象中封裝了向客戶(hù)端發(fā)送數(shù)據(jù)、發(fā)送響應(yīng)頭,發(fā)送響應(yīng)狀態(tài)碼的方法。北京傳智播客教育 HttpServletResponse北京傳智播客教育 response 指定狀態(tài)碼&頭信息狀態(tài)碼(Status Code)setStatus(int)常用狀態(tài)碼:200、302、304、404、500頭信息 (Header Info)addHeader(String,String)setHeader(String,String)北京傳智播客教育 response生成響應(yīng)獲得向客戶(hù)端進(jìn)行數(shù)據(jù)輸出的流對(duì)象字節(jié)流數(shù)據(jù)輸出OutputStream out = respons

10、e.getOutputStream();字符流數(shù)據(jù)輸出PrintWriter pw = response.getWriter();指定body內(nèi)容的類(lèi)型setContentType(text/html)指定輸出數(shù)據(jù)的編碼格式setCharacterEncoding(gb2312);默認(rèn)情況下,編碼格式是ISO-8859-1北京傳智播客教育 response常見(jiàn)應(yīng)用向客戶(hù)端輸出中文數(shù)據(jù) 分別以O(shè)utputStream和PrintWriter輸出多學(xué)一招:使用HTML語(yǔ)言里面的標(biāo)簽來(lái)控制瀏覽器行為思考:用OutputStream輸出1,為什么用戶(hù)看到的不是1?發(fā)送http頭,控制瀏覽器定時(shí)刷新網(wǎng)頁(yè)

11、(refresh)文件下載和中文文件的下載發(fā)送http頭,控制瀏覽器禁止緩存當(dāng)前文檔內(nèi)容 (expires)輸出驗(yàn)證碼圖片北京傳智播客教育 輸出驗(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.fill

12、Rect(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)繪制干擾線graphics.drawLine(x1, y1, x2, y2);北京傳智播客教育 輸出驗(yàn)證碼圖片設(shè)置字體 graphics.setFont(new Font(Times New Roman, Font.PLAIN, 18);通過(guò)詞

13、庫(kù)生成隨機(jī)驗(yàn)證碼內(nèi)容(native2ascii)ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890;漢字:u4e00 u9fa5graphics.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.writ

14、e(image, jpg, resp.getOutputStream();北京傳智播客教育 response實(shí)現(xiàn)重定向通過(guò)response實(shí)現(xiàn)請(qǐng)求重定向。請(qǐng)求重定向指:一個(gè)web資源收到客戶(hù)端請(qǐng)求后,通知客戶(hù)端去訪問(wèn)另外一個(gè)web資源,這稱(chēng)之為請(qǐng)求重定向。應(yīng)用場(chǎng)景:用戶(hù)登陸實(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ù)的ServletOuputStre

15、am、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)頭組合后輸出到客戶(hù)端。 Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對(duì)象是否已經(jīng)調(diào)用過(guò)close方法,如果沒(méi)有,Servlet引擎將調(diào)

16、用close方法關(guān)閉該輸出流對(duì)象。調(diào)用close的時(shí)候,應(yīng)該會(huì)調(diào)用flushBuffer 北京傳智播客教育 HttpServletRequest梁 桐北京傳智播客教育 HttpServletRequestHttpServletRequest對(duì)象代表客戶(hù)端的請(qǐng)求,當(dāng)客戶(hù)端通過(guò)HTTP協(xié)議訪問(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ì)象北京傳智播客教育 HttpServletRequest北京傳智播客教育 request獲取客戶(hù)機(jī)信息getReq

17、uestURL方法返回客戶(hù)端發(fā)出請(qǐng)求時(shí)的完整URLgetRequestURI方法返回請(qǐng)求行中的資源名部分getQueryString 方法返回請(qǐng)求行中的參數(shù)部分getRemoteAddr方法返回發(fā)出請(qǐng)求的客戶(hù)機(jī)的IP地址getRemoteHost方法返回發(fā)出請(qǐng)求的客戶(hù)機(jī)的完整主機(jī)名getRemotePort方法返回客戶(hù)機(jī)所使用的網(wǎng)絡(luò)端口號(hào)getLocalAddr方法返回WEB服務(wù)器的IP地址getLocalName方法返回WEB服務(wù)器的主機(jī)名getMethod得到客戶(hù)機(jī)請(qǐng)求方式北京傳智播客教育 request獲取請(qǐng)求頭信息獲得客戶(hù)機(jī)請(qǐng)求頭getHeader(name)方法 String get

18、Headers(String name)方法 EnumerationgetHeaderNames方法 Enumeration獲得具體類(lèi)型客戶(hù)機(jī)請(qǐng)求頭getIntHead(name)方法 intgetDateHead(name)方法 long(日期對(duì)應(yīng)毫秒)北京傳智播客教育 request獲取請(qǐng)求參數(shù)getParameter(name) String 通過(guò)name獲得值getParameterValues String 通過(guò)name獲得多值getParameterNames Enumeration 獲得所有namegetParameterMap Map key :name value: 多值數(shù)據(jù)

19、非空校驗(yàn)處理中文亂碼postsetCharacterEncoding /放在getParameter前才有效getnew String(str.getBytes(“ISO-8859-1”),”utf-8”)設(shè)置tomcat Connector URIEncoding=“utf-8”北京傳智播客教育 URL特殊字符轉(zhuǎn)義規(guī)則常用轉(zhuǎn)義規(guī)則空格換成加號(hào)(+) +換成%2B正斜杠(/)分隔目錄和子目錄 換成%2F 問(wèn)號(hào)(?)分隔URL和查詢(xún) 換成%3F 百分號(hào)(%)制定特殊字符 換成%25 #號(hào)指定書(shū)簽 換成%23 &號(hào)分隔參數(shù) 換成%26 .URLEncoder和 .URLDecoder北京傳智播客教

20、育 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

21、對(duì)象封裝的資源。如果在調(diào)用forward方法之前,在Servlet程序中寫(xiě)入的部分內(nèi)容已經(jīng)被真正地傳送到了客戶(hù)端 mited true,forward方法將拋出IllegalStateException異常如果在調(diào)用forward方法之前向Servlet引擎的緩沖區(qū)(response)中寫(xiě)入了內(nèi)容,只要寫(xiě)入到緩沖區(qū)中的內(nèi)容還沒(méi)有被真正輸出到客戶(hù)端 mited false,forward方法就可以被正常執(zhí)行,原來(lái)寫(xiě)入到輸出緩沖區(qū)中的內(nèi)容將被清空resetBuffer,但是,已寫(xiě)入到HttpServletResponse對(duì)象中的響應(yīng)頭字段信息保持有效。 北京傳智播客教育 請(qǐng)求轉(zhuǎn)發(fā)的運(yùn)行流程(課后看

22、)北京傳智播客教育 請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)的區(qū)別 一個(gè)web資源收到客戶(hù)端請(qǐng)求后,通知服務(wù)器去調(diào)用另外一個(gè)web資源進(jìn)行處理(服務(wù)器內(nèi)部的調(diào)用),稱(chēng)之為請(qǐng)求轉(zhuǎn)發(fā)一個(gè)web資源收到客戶(hù)端請(qǐng)求后,通知瀏覽器去訪問(wèn)另外一個(gè)web資源(瀏覽器進(jìn)行2次請(qǐng)求),稱(chēng)之為請(qǐng)求重定向北京傳智播客教育 轉(zhuǎn)發(fā) vs. 重定向可以通過(guò)兩種方式得到RequestDispatcherServletContext.getRequestDispatcher(String path);其中這里的path必須開(kāi)始為/,即這里的path必須相對(duì)于context的root.ServeltRequest.getRequestDispat

23、cher(String path);這里的path可以為相對(duì)路徑,如果path開(kāi)始為“/”,則也認(rèn)為是從context的root開(kāi)始的。重定向RedirectHttpServletResponse.sendRedirect(String location)北京傳智播客教育 請(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地址變成重定

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論