版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、北京傳智播客http:/java 第 09 天 request 與 response【教學(xué)內(nèi)容】request 與 response 介紹request與response的作用與由來request與response的體系結(jié)構(gòu)response詳纟田介紹response常用API介紹response操作響應(yīng)狀態(tài)碼response操作響應(yīng)頭重定向定時(shí)跳轉(zhuǎn)設(shè)置響應(yīng)正文生成驗(yàn)證碼request詳細(xì)介紹獲取http請求信息獲取請求參數(shù)請求參數(shù)亂碼分析與解決Request域?qū)ο蠼榻B請求轉(zhuǎn)發(fā)請求轉(zhuǎn)發(fā)與重定向區(qū)別請求包含【教學(xué)總結(jié)】【第一階段】【學(xué)習(xí)目標(biāo)】掌握request與response的作用掌握reque
2、st與response的體系結(jié)構(gòu)【內(nèi)容:request 與response 介紹】 request 與response 的由來及作用requestWeb服務(wù)器收到客戶端的http請求,會針對每一次請求,分別創(chuàng)建一個(gè)用于代表請求的對象、和代表響應(yīng)的 respo nse對象request和response對象即然代表請求和響應(yīng),那我們要獲取客戶機(jī)提交過來的數(shù)據(jù),只需要找 request對象就行了。要向客戶機(jī)輸出數(shù)據(jù),只需要找response對象就行了 .request 與response 的體系結(jié)構(gòu)javax.servlet.Servlet 接口中的 service 方法public abstra
3、ct void service(ServletRequest req, ServletResp onse res) throws ServletExcepti on, I OExcepti on; javax.servlet.GenericServlet 類中的 service 方法public abstract void service(ServletRequest req, ServletResp onse res) throws ServletExcepti on, I OExcepti on; javax.servlet.http.HttpServlet 類中的 service 方法在
4、這個(gè)類中對service方法進(jìn)行了重載public abstract void service(ServletRequest req, ServletResp onse res) throws ServletExcepti on, I OExcepti on; protected void service(HttpServletRequest req, HttpServletResp onse resp)throws ServletExcepti on, I OExcepti on11北京市海淀區(qū)建材城西路金燕龍辦公樓一層javflk. ser w 1 et.y 1 -AlRequest# n
5、-jiiavax. serv 1 eta http. HttpSer w 1 ctReucst-fe 口imp I merit召serv l et- Servl etRespflnsefe 口jcivan. Ecrvle-t. http- Httpcrvl口i np I ementsorg ApactiE.I ina. conneGtor RcwDon若eF刃cadeorg. apache, catal ina. ccKinector. RequEstFaGade【筆試面試題】無【重點(diǎn)總結(jié)】掌握request與response的作用,了解它的體系結(jié)構(gòu)【第二階段】【學(xué)習(xí)目標(biāo)】掌握response
6、對象操作http響應(yīng)的API掌握重定向的概念及實(shí)現(xiàn)【內(nèi)容:response詳細(xì)介紹】response常用API介紹前面我們已經(jīng)介紹過 response對象可以用于封裝我們的http響應(yīng)信息,對于http響應(yīng),它有三部分給成,http響應(yīng)行,http響應(yīng)頭,http響應(yīng)正文,下圖是關(guān)于 response操作http響應(yīng)常用 API介紹Sef 呻 ApachH3flyote/l, 1 CantentLenEth 0Date Sat? 06 Se:p 2014 02:28=14 GMT響倉頭呎庖正文蝕是拄瀏范琴顯予的垃息respMnea setSt-atus (,int code)闕tMeadsr
7、0 sctDa0 sat IntHsadsr 0;reepQriBfl-呂曹 tHr it er 0 response EOutputStream C1response- BetCcmtentType ftexVhtml ;char6et=iitf-8);櫚直壻瑪設(shè)Jresponse 操作響應(yīng)狀態(tài)碼在http響應(yīng)行中,有一個(gè)很重要的值,它叫做響應(yīng)狀態(tài)碼,它可以有五種類型取值,狀態(tài)碼含義100-199表示成功接收請求,要求睿戶端繼續(xù)堤交下一次請求才能完硯整個(gè)處理 過程200-299表不成功接收請求并已完咸整個(gè)處理誼程,常用2叩300-399為完成請求,客戶需進(jìn)一步細(xì)化請求。例如,請求的資源已經(jīng)移
8、動一個(gè) 新地址!常用302 307和304400-499甞戶端的清求有錯(cuò)誤*常用404500-599服務(wù)器端出規(guī)堵誤,常用500常用狀態(tài)碼200請求成功(其后是對 GET和POST請求的應(yīng)答文檔。)302所請求的頁面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url。304未按預(yù)期修改文檔??蛻舳擞芯彌_的文檔并發(fā)出了一個(gè)條件性的請求(一般是提供If-Modified-Si nee 頭表示客戶只想比指定日期更新的文檔)。服務(wù)器告訴客戶,原來緩沖的 文檔還可以繼續(xù)使用。404沒有找到文件或目錄。405請求中指定的方法不被允許500請求未完成。服務(wù)器遇到不可預(yù)知的情況HttpServletResponse 操作狀態(tài)碼 API
9、void setStatus(int sc,String sm)設(shè)置狀態(tài)代碼void sen dError(i nt sc) throws lOExcepti on設(shè)置錯(cuò)誤狀態(tài)碼void sen dError(i nt sc,Stri ng msg) throws IOExcepti on設(shè)置錯(cuò)誤狀態(tài)碼及信息response 操作響應(yīng)頭http響應(yīng)頭的格式是name:value的格式,如果有多個(gè)value值,以”,分開如Conten t-E ncodi ng: gzipCo nten t-Le ngth: 123Conten t-La nguage: zh-c nCo nten t-Type:
10、 text/html; charset=GB2312Last-Modified: Tue, 11 Jul 2000 18:23:51 GMTHttpServletResponse 操作響應(yīng)頭 APIvoid setHeader(Stri ng n ame,Stri ng value)用給定名稱和值設(shè)置響應(yīng)頭。如果已經(jīng)設(shè)置了頭,則新值將重寫以前的值public void addHeader(Stri ng n ame, String value)用給定名稱和值添加響應(yīng)頭。此方法允許響應(yīng)頭有多個(gè)值public void set In tHeader(Stri ng n ame, int value
11、)用給定名稱和整數(shù)值設(shè)置響應(yīng)頭。如果已經(jīng)設(shè)置了頭,則新值將重寫以前的值。public void addI ntHeader(Stri ng n ame, int value)用給定名稱和整數(shù)值添加響應(yīng)頭。此方法允許響應(yīng)頭有多個(gè)值。public void setDateHeader(Stri ng n ame, l ong date)用給定名稱和日期值設(shè)置響應(yīng)頭。該日期根據(jù)距歷元時(shí)間的毫秒數(shù)指定。如果已經(jīng)設(shè)置了頭,則 新值將重寫以前的值。public void addDateHeader(Stri ng n ame, l ong date)用給定名稱和日期值添加響應(yīng)頭。該日期根據(jù)距歷元時(shí)間的毫秒
12、數(shù)指定。此方法允許響應(yīng)頭有多 個(gè)值。stdmaO2案例-重定向http:/liocalhiast/d-aD/&ecind/ 1.設(shè)置狀態(tài)碼為302resp on se.setStatus(302);/ 2.設(shè)置響應(yīng)頭locationresp on se.setHeader(locati on, http:/localhost/day09/sec on d);resp on se.setHeader(locati on, /day09/sec on d);/在開發(fā)中resp on se.se ndRedirect(/dayO9/sec on d);案例-定時(shí)跳轉(zhuǎn)在 servlet 中:respo
13、 nse.setHeader(refresh, 3;url=http:/localhost/day09/demo2.html);resp on se.setHeader(refresh, 3;url=/day09/demo2.html);在html頁面中:在頁面中通過方式操作時(shí),會將標(biāo)簽內(nèi)容寫入到http響應(yīng)中。設(shè)置響應(yīng)正文http響應(yīng)正文是我們最終在瀏覽器上看到的結(jié)果。對于HttpServletResponse如果想要操作響應(yīng)正文,需要通過response對象獲取到輸出流,將信息寫回到瀏覽器端H ttpServletResponse 操作響應(yīng)正文 API 獲得向客戶端進(jìn)行數(shù)據(jù)輸出的流對象 字
14、節(jié)流數(shù)據(jù)輸出Outputstream out = resp on se.getOutputStream();字符流數(shù)據(jù)輸出Prin tWriter pw = resp on se.getWriter();設(shè)置輸出數(shù)據(jù)的編碼格式默認(rèn)情況下,編碼格式是 ISO-8859-1public void setCharacterE ncodi ng(Stri ng charset)設(shè)置將發(fā)送到客戶端的響應(yīng)的字符編碼public void setC onten tType(Stri ng type)設(shè)置將發(fā)送到客戶端的響應(yīng)的內(nèi)容類型,如果該響應(yīng)尚未提交。給定內(nèi)容類型可能包含字符編碼規(guī)范,例如 text/ht
15、ml;charset=UTF-8操作響應(yīng)正文注意事項(xiàng)getOutputStream和getWriter方法分別用于得到輸出二進(jìn)制數(shù)據(jù)、輸出文本數(shù)據(jù)的 ServletOuputStream、Printwriter 對象。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)頭組合后輸出到客戶端。S
16、erlvet的service方法結(jié)束后,Servlet引擎將檢查 getWriter或getOutputStream方法返回的輸出流 對象是否已經(jīng)調(diào)用過 close方法,如果沒有,Servlet引擎tomcat將調(diào)用close方法關(guān)閉該輸出流 對象。調(diào)用close的時(shí)候,應(yīng)該會調(diào)用 flushBuffer案例-生成驗(yàn)證碼代碼import java.awt.Color;import java.awt.F ont;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.Bufferedlmage;impor
17、t java.i o.I OExceptio n;import java.util.Ra ndom;import javax.imagei o.Im ageIO;import javax.servlet.ServletExceptio n;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResp on se;/驗(yàn)證碼public class ImageCodeServlet exte nds HttpSe
18、rvlet public void doGet(HttpServletRequest request, HttpServletResp onse resp onse) throws ServletExcepti on, I OExcepti on /使用java圖形界面技術(shù)繪制一張圖片int charNum = 4;int width = 30 * 4;int height = 30;/ 1.創(chuàng)建一張內(nèi)存圖片BufferedImage bufferedImage = new BufferedImage(width, height, Bufferedlmage.TYPE_INT_RGB);/ 2
19、.獲得繪圖對象Graphics graphics = bufferedImage.getGraphics();/ 3、繪制背景顏色graphics.setColor(Color.YELLOW);graphics.fillRect(O, 0, width, height);/ 4、繪制圖片邊框graphics.setColor(Color.BLUE);graphics.drawRect(0, 0, width - 1, height - 1);/ 5、輸出驗(yàn)證碼內(nèi)容graphics.setColor(Color.RED);graphics.setFont(new Font(宋體,Font.BOL
20、D, 20);/隨機(jī)輸出4個(gè)字符Graphics2D graphics2d = (Graphics2D) graphics;Stri ng s = ABCDEFGHIGKLMNOPQRSTUVWXYZ01234567890Ran dom ran dom = new Ran dom();String msg=;int x = 5;for (int i = 0; i 4; i+) int in dex = random.n ext In t(26);String content = String.valueOf(s.charAt(index);msg+=c ontent;double theta
21、= random.nextInt(45) * Math.PI / 180;graphics2d.rotate(theta, x, 18);graphics2d.drawStri ng(c ontent, x, 18);graphics2d.rotate(-theta, x, 18);x += 30;/ 6、繪制干擾線graphics.setColor(Color.GRAY);for (int i = 0; i gstHeaderNames Enume r at i cn獲礙具悸黑型需戶就請耒頭 get I ntHcad name.)才法 =二 i nt getDat eHead (name)方
22、法 II we (蠱期對應(yīng): 秒get Par日net er(nane)ge riParanetempo get ParanetEfUTliwis f name) $ ge tPar awt erHnes (HttpServletRequest 操作 http 請求常用 API獲取請求行信息public Stri ng getMethod()返回用于發(fā)出此請求的HTTP方法的名稱,例如 GET、POSTpublic Stri ng getRequestURI()返回此請求的URL的一部分,從協(xié)議名稱一直到HTTP請求的第一行中的查詢字符串。public String getProtocol()
23、以protocol/majorVersion.minorVersion 的形式(例如 HTTP/1.1 )返回請求使用的協(xié)議的名稱和版本。 public String getQueryString()返回包含在請求 URL中路徑后面的查詢字符串。如果URL沒有查詢字符串,則此方法返回null。 獲取客戶機(jī)信息public Stri ng getCo ntextPath()返回請求 URI指示請求上下文的那一部分。public Stri ngBufer getRequestURL()重新構(gòu)造客戶端用于發(fā)出請求的URL。返回的URL包含一個(gè)協(xié)議、服務(wù)器名稱、端口號、服務(wù)器路徑,但是不包含查詢字符串
24、參數(shù)。public String getRemoteAddr()返回發(fā)送請求的客戶端或最后一個(gè)代理的In ternet Protocol (IP)地址獲取請求頭信息public String getHeader(Stri ng n ame)以String的形式返回指定請求頭的值。public java.util.Enumeration getHeaders(String name)以String對象的Enumeration的形式返回指定請求頭的所有值。public java.util.Enumeration getHeaderNames()返回此請求包含的所有頭名稱的枚舉。如果該請求沒有頭,則
25、此方法返回一個(gè)空枚舉。public int getIntHeader(String name)以int的形式返回指定請求頭的值。如果該請求沒有指定名稱的頭,則此方法返回-1。如果無法將頭轉(zhuǎn)換為整數(shù),則此方法拋出NumberFormatException。public long getDateHeader(Stri ng n ame)以表示Date對象的long值的形式返回指定請求頭的值獲取請求參數(shù)請求參數(shù)是瀏覽器發(fā)送請求時(shí)攜帶的信息。對于請求方式 GET與POST,請求參數(shù)存在位置不同。GET :請求參數(shù)存在于請求的資源路徑中。POST:請求參數(shù)存在于正文中HttpServletRequest
26、 操作請求參數(shù) APIpublic String getParameter(Stri ng n ame)以String形式返回請求參數(shù)的值,如果該參數(shù)不存在,則返回nullpublic Strin g getParameterValues(Stri ng n ame)返回包含給定請求參數(shù)擁有的所有值的String對象數(shù)組,如果該參數(shù)不存在,則返回null。public java.util.Map getParameterMap()返回此請求的參數(shù)的java.util.Map。請求參數(shù)是與請求一起發(fā)送的額外信息。對于HTTP servlet,參數(shù)包含在查詢字符串或發(fā)送的表單數(shù)據(jù)中。public
27、java.util.E nu merati on getParameterNames()返回包含此請求中所包含參數(shù)的名稱的String對象的Enumeration。如果該請求沒有參數(shù),則此方法返回一個(gè)空的Enumeration。請求參數(shù)亂碼分析與解決亂碼出現(xiàn)的根本原因?漢字在不同的編碼表中的碼值不一樣,那么在使用不同的編碼表進(jìn)行解碼與編碼操作時(shí),就會 出現(xiàn)亂碼問題.請求參數(shù)亂碼原因:請求參數(shù)中如果有中文,它是以 utf-8碼進(jìn)行了編碼。Tomcat得到請求參數(shù)是使用iso8859-1進(jìn)行了解碼,封裝到了request中。在通過request獲取請求信息就是亂碼。解決方案:使用iso8859-1
28、進(jìn)行編碼在使用utf-8進(jìn)行解碼new String(username.getBytes(859-1so8), -8utf);如果請求方式是 POST,可以直接使用request.setCharacterEncoding( “ utf-8);就可以解決。request域?qū)ο蠼榻Brequest對象同時(shí)也是一個(gè)域?qū)ο螅_發(fā)人員通過request對象在實(shí)現(xiàn)轉(zhuǎn)發(fā)時(shí),把數(shù)據(jù)通過request對象帶給其它web資源處理setAttribute 方法getAttribute 方法 removeAttribute 方法 getAttributeNames 方法 request對象提供了一個(gè) getReques
29、tDispatcher方法,該方法返回一個(gè)RequestDispatcher對象,調(diào)用這個(gè)對象的forward方法可以實(shí)現(xiàn)請求轉(zhuǎn)發(fā),從而共享請求中的數(shù)據(jù)請求轉(zhuǎn)發(fā)請求轉(zhuǎn)發(fā)可以實(shí)現(xiàn)路徑的跳轉(zhuǎn)操作.ReqeustDispatcher dispatcher=request.getRequestDispatcher(路徑) dispatcher.forward(request,resp on se)請求轉(zhuǎn)發(fā)與重定向區(qū)別1. 請求轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部跳轉(zhuǎn),地址欄不會發(fā)生改變北京傳智播客重定向地址欄會發(fā)生改變。2. 請求轉(zhuǎn)發(fā),只有一次請求,一次響應(yīng).重定向,有兩次請求,兩次響應(yīng)。3. 請求轉(zhuǎn)發(fā)存在request域,可以共享數(shù)據(jù).重定向不存在 request域。4. 請求轉(zhuǎn)發(fā)只能在服務(wù)器的內(nèi)部跳轉(zhuǎn),簡單說,只能訪問本站內(nèi)資源。重定向可以訪問站外資源,也可以訪問站內(nèi)資源5. 請求轉(zhuǎn)發(fā)是由 request 發(fā)起的.request
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省博野縣2025屆生物高一上期末經(jīng)典模擬試題含解析
- 2025屆陜西省西安電子科技大學(xué)附屬中學(xué)生物高三第一學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 高考文科數(shù)學(xué)一輪復(fù)習(xí)練習(xí)第一篇第2節(jié) 命題及其關(guān)系充分條件與必要條件
- 包裝機(jī)出售轉(zhuǎn)讓合同書范本
- 舉一反三系列高考高中數(shù)學(xué)同步及復(fù)習(xí)資料人教A版必修1專題4.9 函數(shù)的應(yīng)用(二)-重難點(diǎn)題型精講(含答案及解析)
- 三年級數(shù)學(xué)三位數(shù)除以一位數(shù)綜合練習(xí)模擬題大全附答案
- 服裝店店長個(gè)人工作總結(jié)6篇
- 美術(shù)課教案中班反思7篇
- 行為養(yǎng)成教育心得體會7篇
- 2024年工資集體協(xié)商協(xié)議經(jīng)典版(二篇)
- 期中 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 應(yīng)急預(yù)案演練、總結(jié)和評估制度
- 四年級數(shù)學(xué)(三位數(shù)乘兩位數(shù))計(jì)算題專項(xiàng)練習(xí)及答案
- 2024湘教版初中八年級數(shù)學(xué)上冊第章分式大單元整體教學(xué)設(shè)計(jì)
- 期中鞏固練習(xí)(試題)-2024-2025學(xué)年統(tǒng)編版(2024)語文一年級上冊
- 防風(fēng)應(yīng)急預(yù)案
- 平均數(shù)(教案)-2024-2025學(xué)年蘇教版四年級上冊數(shù)學(xué)
- 人教版(2024)第三單元-漢語拼音《zcs》教學(xué)課件
- 2023-2024學(xué)年河南省鄭州實(shí)驗(yàn)外國語中學(xué)八年級(上)月考數(shù)學(xué)試卷(10月份)含答案
- 4《平平安安回家來》第二課時(shí)(教學(xué)設(shè)計(jì))-一年級道德與法治上冊統(tǒng)編版·2024
- 羊肚菌采購協(xié)議書模板
評論
0/150
提交評論