forward、redirect、浏览器的路径问题
| 瀏覽器: 1、路徑以“/”開頭,瀏覽器會(huì)把http://localhost:8080/作為根目錄 <img src="http://images.cnblogs.com/mark_arrow_03.gif" width="14" height="14"/> 在sysmgr文件中。 瀏覽器請(qǐng)求:http://zmg-pc:8088/images/mark_arrow_03.gif?? 失敗 2、路徑以“../”開頭,瀏覽器會(huì)把當(dāng)前所在的目錄作為根目錄,查找上一級(jí)目錄 <img src="../images/mark_arrow_03.gif" width="14" height="14"/> 在sysmgr文件中。 瀏覽器請(qǐng)求:http://zmg-pc:8088/DRP/images/mark_arrow_03.gif?? 成功 3、以文件名開頭,瀏覽器會(huì)把當(dāng)前所在的目錄作為根目錄,查找子目錄 <img src="images/mark_arrow_03.gif" width="14" height="14"/> 在sysmgr文件中。 瀏覽器請(qǐng)求:http://zmg-pc:8088/DRP/sysmgr/images/mark_arrow_03.gif? 失敗 ? ? forward,redirect 在相對(duì)路徑上,兩者的表現(xiàn)是相同的。 看看lingo-sample/03-03/這個(gè)例子,如果我們?nèi)フ?qǐng)求relative/forward.jsp或redirect.jsp,然后從這里再轉(zhuǎn)向它下面的result/result.jsp會(huì)怎樣呢? forward的例子: <%request.getRequestDispatcher("result/result.jsp").forward(request, response);%>這里的相對(duì)路徑就是result/result.jsp。 因?yàn)閯倓傉?qǐng)求的test.jsp是在/03-03/relative/下,所以我們的當(dāng)前路徑就是/03-03/relative/,執(zhí)行forward的時(shí)候會(huì)尋找當(dāng)前路徑下的result/result.jsp,/03-03/relative/result/result.jsp,找到之后便轉(zhuǎn)發(fā)請(qǐng)求。 redirect的例子: <%response.sendRedirect("result/result.jsp");%>這里的相對(duì)路徑也是result/result.jsp。 因?yàn)閯倓傉?qǐng)求的test.jsp是在/03-03/relative/下,所以我們的當(dāng)前路徑就是/03-03/relative/, 3.4.1.2. 絕對(duì)路徑問題出現(xiàn)了,絕對(duì)路徑在forward和redirect中出現(xiàn)了差別,還是剛才的情況,但使用絕對(duì)路徑的時(shí)候?qū)懛ū悴煌恕?/span> forward的例子: <%request.getRequestDispatcher("/relative/result/result.jsp").forward(request, response);%> 這里的絕對(duì)路徑就是/relative/result/result.jsp。 在本地測試時(shí),forward把http://localhost:8080/03-03/當(dāng)作根路徑,在它的基礎(chǔ)上計(jì)算絕對(duì)路徑。為什么? 因?yàn)檫@是由jsp的部署方式?jīng)Q定的,webapp里可以放好多項(xiàng)目,為了讓這些項(xiàng)目可以互不影響、獨(dú)立運(yùn)行,不能讓請(qǐng)求從一個(gè)項(xiàng)目直接在服務(wù)器內(nèi)部轉(zhuǎn)移到另一個(gè)項(xiàng)目。為了防止出現(xiàn)這種情況,Tomcat在執(zhí)行forward的時(shí)候干脆把項(xiàng)目的路徑當(dāng)作根目錄,開發(fā)者看不到其他項(xiàng)目,也就不會(huì)出現(xiàn)問題了。 redirect的例子: <%response.sendRedirect("/03-03/absolute/result/result.jsp");%>這里的絕對(duì)路徑卻是/03-03/absolute/result/result.jsp。 在本地測試時(shí),redirect把http://localhost:8080/當(dāng)作根路徑,在它的基礎(chǔ)上計(jì)算絕對(duì)路徑。 因?yàn)閞edirect會(huì)讓瀏覽器重新發(fā)起一個(gè)新請(qǐng)求,所以不會(huì)攪亂服務(wù)器里多個(gè)項(xiàng)目之間的關(guān)系, 總結(jié): 以“文件名開頭”,相對(duì)路徑,都在當(dāng)前目錄下找。 以“../”開頭的,相對(duì)路徑,都在當(dāng)前目錄的上一級(jí)目錄找。 以“/”開頭,絕對(duì)路徑,forward以當(dāng)前項(xiàng)目文件為根目錄找,瀏覽器和redirect以http://localhost:8080/為根目錄找。 |
轉(zhuǎn)載于:https://www.cnblogs.com/zengmiaogen/archive/2012/04/15/2450379.html
總結(jié)
以上是生活随笔為你收集整理的forward、redirect、浏览器的路径问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL语句从入门到精通之笔记大全
- 下一篇: [ACM_NYOJ_21]三个水杯(BF