摘要:二請(qǐng)求轉(zhuǎn)發(fā)與響應(yīng)重定向中路徑參數(shù)區(qū)別假設(shè)通過請(qǐng)求到達(dá)該方法所屬的。請(qǐng)求轉(zhuǎn)發(fā)參數(shù)可以指定為相對(duì)路徑或絕對(duì)路徑。同理提交表單給路徑問題頁(yè)面提交表單給時(shí),路徑的寫法要格外注意。
轉(zhuǎn)自:http://blog.sina.com.cn/s/blo...
一、請(qǐng)求轉(zhuǎn)發(fā)與響應(yīng)重定向的種類有兩種方式獲得Servlet轉(zhuǎn)發(fā)對(duì)象(RequestDispatcher):一種是通過HttpServletRequest的getRequestDispatcher()方法獲得,一種是通過ServletContext的getRequestDispatcher()方法獲得。
Servlet重定向的方法只有一種:HttpServletResponse的sendRedirect()方法。
這三個(gè)方法的參數(shù)都是一個(gè)URL形式的字符串,但在使用相對(duì)路徑或絕對(duì)路徑上有所區(qū)別。
二、請(qǐng)求轉(zhuǎn)發(fā)與響應(yīng)重定向中路徑參數(shù)區(qū)別假設(shè)通過http ://localhost/myApp/cool/bar.do 請(qǐng)求到達(dá)該方法所屬的Servlet。
1、響應(yīng)重定向 ◆ HttpServletResponse.sendRedirect(String)
參數(shù)可以指定為相對(duì)路徑、絕對(duì)路徑或其它Web應(yīng)用。
i:相對(duì)路徑:response.sendRedirect("foo/stuff.do"),容器相對(duì)于原來(lái)請(qǐng)求URL的目錄加參數(shù)來(lái)生成完整的URL——http ://localhost/myApp/cool/foo/stuff.do。
ii:絕對(duì)路徑:response.sendRedirect("/foo/stuff.do"),容器相對(duì)于Web應(yīng)用本身加參數(shù)建立完整的URL,這是因?yàn)?重定向response.sendRedirect("")是服務(wù)器向客戶端發(fā)送一個(gè)請(qǐng)求頭信息,由客戶端再請(qǐng)求一次服務(wù)器,請(qǐng)求是在服務(wù)器外進(jìn)行的,即完整的url是——http ://localhost/foo/stuff.do。
iii:其它Web應(yīng)用:response.sendRedirect("http://www.xxx.com")容器直接定向到該URL。
2、請(qǐng)求轉(zhuǎn)發(fā) ◆HttpServletRequest.getRequestDispatcher(String)
參數(shù)可以指定為相對(duì)路徑或絕對(duì)路徑。
i:相對(duì)路徑情況下生成的完整URL與重定向方法相同。
ii:絕對(duì)路徑與Servlet重定向不同,容器將相對(duì)于Web應(yīng)用的根目錄加參數(shù)生成完整的URL(即“/”根路徑就是相對(duì)于虛擬路徑)這是因?yàn)檗D(zhuǎn)發(fā)是在服務(wù)器內(nèi)部進(jìn)行的,寫絕對(duì)路徑/開頭指的是當(dāng)前的Web應(yīng)用程序即:
request.getRequestDispatcher("/foo/stuff.do")生成的URL是
http ://localhost/myApp/foo/stuff.do。
3、 ◆ ServletContext.getRequestDispatcher(String)
參數(shù)只能指定為絕對(duì)路徑,生成的完整URL與HttpServletRequest.getRequestDispatcher(String)相同。
同理:
JSP 提交表單給 Servlet 路徑問題
JSP頁(yè)面提交表單給Servlet時(shí),路徑的寫法要格外注意。
例如在web.xml中注冊(cè)如下的servlet:
addStudent org.mytest.addStudent addStudent /servlet/addStudent
假如說(shuō),你工程名字為HibernateApp3,JSP頁(yè)面提交表單給servlet時(shí)有兩種寫法:
1.相對(duì)路徑:
2.絕對(duì)路徑:
或者
注意:/代表根目錄,如果路徑是使用/開頭,Tomcat就是webApp那個(gè)目錄,如果你不是/開頭代表你從當(dāng)前工程的目錄開始,例如:webApp/HibernateApp3/
這一點(diǎn)非常重要,很多提交表單時(shí)發(fā)生的錯(cuò)誤都是因?yàn)樘峤宦窂匠鲥e(cuò)造成的。
附、
綜上所述:這里最最關(guān)鍵的要能清楚發(fā)出請(qǐng)求目的資源的請(qǐng)求是在服務(wù)器內(nèi)部還是服務(wù)器外部:內(nèi)部時(shí),“/”就是項(xiàng)目的虛擬目錄;外部時(shí),“/”就是代表主機(jī)的根目錄
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/54611.html
摘要:瀏覽器的中文數(shù)據(jù)提交給服務(wù)器,以編碼對(duì)中文編碼,當(dāng)我在讀取數(shù)據(jù)的時(shí)候,拿到的當(dāng)然是亂碼。接下來(lái)使用方式傳遞中文數(shù)據(jù),把表單的方式改成即可當(dāng)我們?cè)L問的時(shí)候,又出現(xiàn)亂碼了于是我按照上面的方式,把對(duì)象設(shè)置編碼為試試結(jié)果還是亂碼。 什么是HttpServletRequest HttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時(shí),HTTP請(qǐng)求頭中的所有信...
實(shí)際發(fā)生位置不同,地址欄不同 轉(zhuǎn)發(fā)是發(fā)生在服務(wù)器的 轉(zhuǎn)發(fā)是由服務(wù)器進(jìn)行跳轉(zhuǎn)的,細(xì)心的朋友會(huì)發(fā)現(xiàn),在轉(zhuǎn)發(fā)的時(shí)候,瀏覽器的地址欄是沒有發(fā)生變化的,在我訪問Servlet111的時(shí)候,即使跳轉(zhuǎn)到了Servlet222的頁(yè)面,瀏覽器的地址還是Servlet111的。也就是說(shuō)瀏覽器是不知道該跳轉(zhuǎn)的動(dòng)作,轉(zhuǎn)發(fā)是對(duì)瀏覽器透明的。通過上面的轉(zhuǎn)發(fā)時(shí)序圖我們也可以發(fā)現(xiàn),實(shí)現(xiàn)轉(zhuǎn)發(fā)只是一次的http請(qǐng)求,一次轉(zhuǎn)發(fā)中...
摘要:系列文章請(qǐng)查看超詳細(xì)的面試題總結(jié)一之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)二之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)三之集合篇常見問題下面的都是自己之前在學(xué)習(xí)的時(shí)候總結(jié)的,對(duì)于鞏固的基礎(chǔ)知識(shí)應(yīng)該有很大幫助。注意多線程的并發(fā)的讀寫類屬性會(huì)導(dǎo)致數(shù)據(jù)不同步。 系列文章請(qǐng)查看: 超詳細(xì)的Java面試題總結(jié)(一)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(二)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(...
閱讀 835·2023-04-25 22:13
閱讀 2347·2019-08-30 15:56
閱讀 2229·2019-08-30 11:21
閱讀 658·2019-08-30 11:13
閱讀 2024·2019-08-26 14:06
閱讀 1962·2019-08-26 12:11
閱讀 2293·2019-08-23 16:55
閱讀 542·2019-08-23 15:30