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