一、Forward與Redirect與<a href >的路徑區別
forward的路徑如果是以"/"開頭,則表示相對Web應用的context, 如果不是則表示相對于當前請求
redirect的路徑如果是以"/"開頭,則表示相對于主機, 如果不是則表示相對于當前請求
<a href>的路徑如果是"/"開頭,則表示相對于主機,如果不是則表示相對于當前請求
二、Forward與Redirect對HTML鏈接的影響
最近在寫一個JSP頁面時,碰到一個奇怪的問題,有一個頁面(forward_from.jsp)根據一個隨機數選擇“轉發”或“重定向”到第二個頁面(forward_result.jsp),在第二個頁面有一個返回的鏈接:<a href = "../forward_from.jsp">。
測試時發現如果第一個頁面是“重定向”到第二個頁面的,則當用戶點擊第二個頁面的返回鏈接時一切正常,當如果是以“轉發”的方式訪問第二個頁面,當用戶點擊返回鏈接會出現“404: File not found”的錯誤。
·頁面結構

當從forward_from.jsp“重定向”到forward_result.jsp時,瀏覽器的地址欄的URL是:
http://localhost:8081/j2eeTestProject/pages/forward/forward_result.jsp
當從forward_from.jsp“轉發”到forward_result.jsp時,瀏覽器的地址欄的URL是:
http://localhost:8081/j2eeTestProject/pages/forward_from.jsp
當從forward_from.jsp“重定向”到forward_result.jsp時,forward_result.jsp頁面的返回鏈接<a href = "../forward_from.jsp">是:
http://localhost:8081/j2eeTestProject/pages/forward_from.jsp
當從forward_from.jsp“轉發”到forward_result.jsp時,forward_result.jsp頁面的返回鏈接<a href ="../forward_from.jsp">是:
http://localhost:8081/j2eeTestProject/forward_from.jsp
從上面的瀏覽器URL和頁面的鏈接寫法我們就可以看出問題所在,因為<a href = "../forward_result.jsp">參考的是Web瀏覽器中地址欄的URL,當“轉發”時因為瀏覽器的URL地址保持不變,所以“../”就被瀏覽器解析成:/j2eeTestProject/,而“重發”時因為瀏覽器的URL地址是真正頁面的地址(/pages/forward/forward_result.jsp),所以../被瀏覽器解析成:/j2eeTestProject/pages/。而這個路徑顯然是不存在的。
總結:以后在JSP中盡量不要使用"../"這樣的寫法,我們可以使用request.getServletContext()或request.getServletPath()來定位到Web應用的根目錄或當前的請求對象。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2008-01-15 23:28
Paul Lin 閱讀(826)
評論(0) 編輯 收藏 所屬分類:
J2EE基礎