
瀏覽器:
1、路徑以“/”開頭,瀏覽器會把http://localhost:8080/作為根目錄
<img src="http://images.cnblogs.com/mark_arrow_03.gif" width="14" height="14"/> 在sysmgr文件中。
瀏覽器請求:http://zmg-pc:8088/images/mark_arrow_03.gif 失敗
2、路徑以“../”開頭,瀏覽器會把當前所在的目錄作為根目錄,查找上一級目錄
<img src="../images/mark_arrow_03.gif" width="14" height="14"/> 在sysmgr文件中。
瀏覽器請求:http://zmg-pc:8088/DRP/images/mark_arrow_03.gif 成功
3、以文件名開頭,瀏覽器會把當前所在的目錄作為根目錄,查找子目錄
<img src="images/mark_arrow_03.gif" width="14" height="14"/> 在sysmgr文件中。
瀏覽器請求:http://zmg-pc:8088/DRP/sysmgr/images/mark_arrow_03.gif 失敗
forward,redirect
在相對路徑上,兩者的表現是相同的。
看看lingo-sample/03-03/這個例子,如果我們去請求relative/forward.jsp或redirect.jsp,然后從這里再轉向它下面的result/result.jsp會怎樣呢?
-
forward的例子:
<%request.getRequestDispatcher("result/result.jsp").forward(request, response);%>
這里的相對路徑就是result/result.jsp。
因為剛剛請求的test.jsp是在/03-03/relative/下,所以我們的當前路徑就是/03-03/relative/,執行forward的時候會尋找當前路徑下的result/result.jsp,/03-03/relative/result/result.jsp,找到之后便轉發請求。
-
redirect的例子:
<%response.sendRedirect("result/result.jsp");%>
這里的相對路徑也是result/result.jsp。
因為剛剛請求的test.jsp是在/03-03/relative/下,所以我們的當前路徑就是/03-03/relative/,
執行redirect的時候會把當前路徑加上(相當於尋找當前路徑下)result/result.jsp,把結果作為重定向的地址發送給瀏覽器,
瀏覽器再去請求/03-03/relative/result/result.jsp,從而得到響應。
問題出現了,絕對路徑在forward和redirect中出現了差別,還是剛才的情況,但使用絕對路徑的時候寫法便不同了。
-
forward的例子:
<%request.getRequestDispatcher("/relative/result/result.jsp").forward
(request, response);%>
這里的絕對路徑就是/relative/result/result.jsp。
在本地測試時,forward把http://localhost:8080/03-03/當作根路徑,在它的基礎上計算絕對路徑。為什么?
因為這是由jsp的部署方式決定的,webapp里可以放好多項目,為了讓這些項目可以互不影響、獨立運行,不能讓請求從一個項目直接在服務器內部轉移到另一個項目。為了防止出現這種情況,Tomcat在執行forward的時候干脆把項目的路徑當作根目錄,開發者看不到其他項目,也就不會出現問題了。
-
redirect的例子:
<%response.sendRedirect("/03-03/absolute/result/result.jsp");%>
這里的絕對路徑卻是/03-03/absolute/result/result.jsp。
在本地測試時,redirect把http://localhost:8080/當作根路徑,在它的基礎上計算絕對路徑。
因為redirect會讓瀏覽器重新發起一個新請求,所以不會攪亂服務器里多個項目之間的關系,
也就不需要對它做限制,如果需要在多個項目之間進行跳轉,就只能使用redirect。不過因為
重新發起了新的請求,上次請求的那些數據都會丟失,如果有什么重要的數據,記得要重新設置。
總結:
以“文件名開頭”,相對路徑,都在當前目錄下找。
以“../”開頭的,相對路徑,都在當前目錄的上一級目錄找。
以“/”開頭,絕對路徑,forward以當前項目文件為根目錄找,瀏覽器和redirect以http://localhost:8080/為根目錄找。