麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

request,路徑問題,轉(zhuǎn)發(fā)和重定向

2024-04-27 15:14:32
字體:
供稿:網(wǎng)友
Request:Request代表請求對象,其中封裝了對請求中具有請求行、請求頭、實(shí)體內(nèi)容的操作的方法1.獲取客戶機(jī)信息getRequestURL方法返回客戶端發(fā)出請求完整URLgetRequestURI方法返回請求行中的資源名部分,在權(quán)限控制中常用getQueryString 方法返回請求行中的參數(shù)部分getRemoteAddr方法返回發(fā)出請求的客戶機(jī)的ip地址getMethod得到客戶機(jī)請求方式getContextPath 獲得當(dāng)前web應(yīng)用虛擬目錄名稱,特別重要!!!,工程中所有的路徑請不要寫死,其中的web應(yīng)用名要以此方法去獲得。2.獲取請求頭信息getHeader(name)方法 --- String ,獲取指定名稱的請求頭的值getHeaders(String name)方法 --- Enumeration<String> ,獲取指定名稱的請求頭的值的集合,因?yàn)榭赡艹霈F(xiàn)多個重名的請求頭getHeaderNames方法 --- Enumeration<String> ,獲取所有請求頭名稱組成的集合getIntHeader(name)方法  --- int ,獲取int類型的請求頭的值getDateHeader(name)方法 --- long(日期對應(yīng)毫秒) ,獲取一個日期型的請求頭的值,返回的是一個long值,從1970年1月1日0時開始的毫秒值*實(shí)驗(yàn):通過referer信息防盜鏈String ref = request.getHeader("Referer");

if (ref == null || ref == "" || !ref.startsWith("http://localhost")) 

{

response.sendRedirect(request.getContextPath() + "/homePage.html");

else 

{

this.getServletContext().getRequestDispatcher("/WEB-INF/fengjie.html").forward(request, response);}3.獲取請求參數(shù)getParameter(name) --- String 通過name獲得值getParameterValues(name)  --- String[ ] 通過name獲得多值 checkboxgetParameterNames  --- Enumeration<String> 獲得所有請求參數(shù)名稱組成的枚舉getParameterMap  --- Map<String,String[ ]> 獲取所有請求參數(shù)的組成的Map集合,注意,其中的鍵為String,值為String[]獲取請求參數(shù)時亂碼問題:瀏覽器發(fā)送的請求參數(shù)使用什么編碼呢?當(dāng)初瀏覽器打開網(wǎng)頁時使用什么編碼,發(fā)送就用什么編碼。

服務(wù)器端獲取到發(fā)過來的請求參數(shù)默認(rèn)使用ISO8859-1進(jìn)行解碼操作,中文一定有亂碼問題

對于Post方式提交的數(shù)據(jù),可以設(shè)置request.setCharacterEncoding("gb2312");來明確指定獲取請求參數(shù)時使用編碼。但是此種方式只對Post方式提交有效。

對于Get方式提交的數(shù)據(jù),就只能手動解決亂碼:String newName = new String(name.getBytes("ISO8859-1"),"gb2312");此種方法對Post方式同樣有效。

在tomcat的server.xml中可以配置http連接器的URIEncoding可以指定服務(wù)器在獲取請求參數(shù)時默認(rèn)使用的編碼,從而一勞永逸的決絕獲取請求參數(shù)時的亂碼問題。也可以指定useBodyEncodingForURI參數(shù),令request.setCharacterEncoding也對GET方式的請求起作用,但是這倆屬性都不推薦使用,因?yàn)榘l(fā)布環(huán)境往往不允許修改此屬性。4.利用請求域傳遞對象生命周期:在service方法調(diào)用之前由服務(wù)器創(chuàng)建,傳入service方法。整個請求結(jié)束,request生命結(jié)束。作用范圍:整個請求鏈。作用:在整個請求鏈中共享數(shù)據(jù),最常用的:在Servlet中處理好的數(shù)據(jù)要交給jsp顯示,此時參數(shù)就可以放置在Request域中帶過去。5.request實(shí)現(xiàn)請求轉(zhuǎn)發(fā)ServletContext可以實(shí)現(xiàn)請求轉(zhuǎn)發(fā),request也可以。在forward之前輸入到response緩沖區(qū)中的數(shù)據(jù),如果已經(jīng)被發(fā)送到了客戶端,forward將失敗,拋出異常在forward之前輸入到response緩沖區(qū)中的數(shù)據(jù),但是還沒有發(fā)送到客戶端,forward可以執(zhí)行,但是緩沖區(qū)將被清空,之前的數(shù)據(jù)丟失。注意丟失的只是請求體中的內(nèi)容,頭內(nèi)容仍然有效。在一個Servlet中進(jìn)行多次forward也是不行的,因?yàn)榈谝淮蝔orward結(jié)束,response已經(jīng)被提交了,沒有機(jī)會再forward了總之,一條原則,一次請求只能有一次響應(yīng),響應(yīng)提交走后,就再沒有機(jī)會輸出數(shù)據(jù)給瀏覽器了。6.RequestDispatcher進(jìn)行include操作forward沒有辦法將多個servlet的輸出組成一個輸出,因此RequestDispatcher提供了include方法,可以將多個Servlet的輸出組成一個輸出返回個瀏覽器request.getRequestDispatcher("/servlet/Demo17Servlet").include(request, response);response.getWriter().write("from Demo16");request.getRequestDispatcher("/servlet/Demo18Servlet").include(request, response);常用在頁面的固定部分單獨(dú)寫入一個文件,在多個頁面中include進(jìn)來簡化代碼量。四、URL編碼1.由于HTTP協(xié)議規(guī)定URL路徑中只能存在ASCII碼中的字符,所以如果URL中存在中文或特殊字符需要進(jìn)行URL編碼。2.編碼原理:將空格轉(zhuǎn)換為加號(+) 對0-9,a-z,A-Z之間的字符保持不變 對于所有其他的字符,用這個字符的當(dāng)前字符集編碼在內(nèi)存中的十六進(jìn)制格式表示,并在每個字節(jié)前加上一個百分號(%)。如字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每個中文字符在內(nèi)存中占兩個字節(jié),字符“中”用%D6%D0表示,字符“國”用%B9%FA表示調(diào)對于空格也可以直接使用其十六進(jìn)制編碼方式,即用%20表示,而不是將它轉(zhuǎn)換成加號(+) 說明:如果確信URL串的特殊字符沒有引起使用上的岐義或沖突你也可以對這些字符不進(jìn)行編碼,而是直接傳遞給服務(wù)器。例如,http://www.it315.org/dealregister.html?name=中國&passWord=123 如果URL串中的特殊字符可能會產(chǎn)生岐義或沖突,則必須對這些特殊字符進(jìn)行URL編碼。例如,服務(wù)器會將不編碼的“中+國”當(dāng)作“中國”處理。還例如,當(dāng)name參數(shù)值為“中&國”時,如果不對其中的“&”編碼,URL字符串將有如下形式:http://www.it315.org/dealregister.html?name=中&國&password=123,應(yīng)編碼為:http://www.it315.org/dealregister.html?name=中%26國&password=123 http://www.it315.org/example/index.html#section2可改寫成http://www.it315.org/example%2Findex.html%23section2 3.在java中進(jìn)行URL編碼和解碼URLencoder.encode("xxxx","utf-8");URLDecoder.decode(str,"utf-8");五、請求重定向和請求轉(zhuǎn)發(fā)的區(qū)別 1.區(qū)別RequestDispatcher.forward方法只能將請求轉(zhuǎn)發(fā)給同一個WEB應(yīng)用中的組件;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點(diǎn)的資源。 如果傳遞給HttpServletResponse.sendRedirect 方法的相對URL以“/”開頭,它是相對于服務(wù)器的根目錄;如果創(chuàng)建RequestDispatcher對象時指定的相對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ā)出對另外一個URL的訪問請求;RequestDispatcher.forward方法在服務(wù)器端內(nèi)部將請求轉(zhuǎn)發(fā)給另外一個資源,瀏覽器只知道發(fā)出了請求并得到了響應(yīng)結(jié)果,并不知道在服務(wù)器程序內(nèi)部發(fā)生了轉(zhuǎn)發(fā)行為。 RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應(yīng)過程;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個獨(dú)立的訪問請求和響應(yīng)過程。 2.應(yīng)用場景(參照圖想)減少服務(wù)器壓力當(dāng)需要更新地址欄時用請求重定向,如注冊成功后跳轉(zhuǎn)到主頁。當(dāng)需要刷新更新操作時用請求重定向,如購物車付款的操作。常用地址的寫法:                     絕對路徑:以/開頭的路徑就叫做絕對路徑,絕對路徑在相對于的路徑上直接拼接得到最終的路徑    相對路徑:不以/開頭的路徑就叫做相對路徑,相對路徑基于當(dāng)前所在的路徑計算的到最終的路徑    硬盤路徑:以盤符開頭的路徑就叫做硬盤路徑.是哪個路徑就是哪個路徑.沒有相對于誰的問題    虛擬路徑: --寫虛擬路徑時都使用絕對路徑        如果路徑是給瀏覽器用的,這個路徑相對于虛擬主機(jī),所以需要寫上web應(yīng)用的名稱        如果路徑是個服務(wù)器用的,這個路徑相對于web應(yīng)用,所以可以省寫web應(yīng)用的名稱      <a href="/Day04/.....">      <form action="/Day04/...">      <img src="/Day04/....">      response.setHeader("Location","/Day04/....");      response.setHeader("refresh","3;url=/Day04/...");      response.sendRedirect("/Day04/...");      request.getRequestDispathce("/index.jsp").forward();      request.getRequestDispathce("/index.jsp").include();          真實(shí)路徑: --寫真實(shí)路徑時都使用相對路徑        根據(jù)原理,具體問題具體分析                servletContext.getRealPath("config.PRoperties");//--給一個相對于web應(yīng)用目錄的路徑        classLoader.getResource("../../config.properties");//--給一個相對于類加載目錄的路徑                File file = new File("config.properties");//--相對于程序的啟動目錄        new InputStream("config.properties");//--相對于程序的啟動目錄
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产三级国产精品国产普男人 | 成人午夜视频免费在线观看 | av在线更新 | 精品一二三区视频 | 午夜视频在线 | 亚洲网站在线观看视频 | 最近国产中文字幕 | 久久久国产视频 | 日韩视频在线观看免费视频 | 欧美日韩国产中文字幕 | 国产男女 爽爽爽爽视频 | 日本中文视频 | 成人在线视频在线观看 | 成人羞羞网站入口 | 一级黄色电影网站 | 日韩欧美动作影片 | 免费观看黄色片视频 | 欧美一级特黄a | 欧美精品一区二区三区四区 | 欧美精品1区 | 免费在线观看中文字幕 | 成人福利视频网站 | 影视免费观看 | 99视频有精品视频高清 | 精品国产一区二区三区天美传媒 | 免费观看一级黄色片 | 久久一区三区 | 91精品国产99久久久久久 | av电影直播| 成人在线视频播放 | 黄色午夜剧场 | 国产精品久久久久久久久久iiiii | 中日韩乱码一二新区 | 福利在线小视频 | 欧美性色大片 | 九九热免费视频在线观看 | 精品一区二区三区在线观看视频 | 欧美一级黄视频 | 综合网天天射 | 一区二区国产在线 | 羞羞网站在线看 |