一、Forward與Redirect與<a href >的路徑區(qū)別
forward的路徑如果是以"/"開頭,則表示相對(duì)Web應(yīng)用的context, 如果不是則表示相對(duì)于當(dāng)前請(qǐng)求
redirect的路徑如果是以"/"開頭,則表示相對(duì)于主機(jī), 如果不是則表示相對(duì)于當(dāng)前請(qǐng)求
<a href>的路徑如果是"/"開頭,則表示相對(duì)于主機(jī),如果不是則表示相對(duì)于當(dāng)前請(qǐng)求
二、Forward與Redirect對(duì)HTML鏈接的影響
最近在寫一個(gè)JSP頁面時(shí),碰到一個(gè)奇怪的問題,有一個(gè)頁面(forward_from.jsp)根據(jù)一個(gè)隨機(jī)數(shù)選擇“轉(zhuǎn)發(fā)”或“重定向”到第二個(gè)頁面(forward_result.jsp),在第二個(gè)頁面有一個(gè)返回的鏈接:<a href = "../forward_from.jsp">。
測(cè)試時(shí)發(fā)現(xiàn)如果第一個(gè)頁面是“重定向”到第二個(gè)頁面的,則當(dāng)用戶點(diǎn)擊第二個(gè)頁面的返回鏈接時(shí)一切正常,當(dāng)如果是以“轉(zhuǎn)發(fā)”的方式訪問第二個(gè)頁面,當(dāng)用戶點(diǎn)擊返回鏈接會(huì)出現(xiàn)“404: File not found”的錯(cuò)誤。
·頁面結(jié)構(gòu)

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