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