1. 程式人生 > >JavaWeb頁面跳轉中的絕對路徑跳轉與相對路徑跳轉

JavaWeb頁面跳轉中的絕對路徑跳轉與相對路徑跳轉

不管在什麼位置,絕對路徑跳轉和相對路徑跳轉都遵循了相同的規則。但是很多初學Servlet的朋友,在Servlet中跳轉頁面時經常出現404的問題,就會常常懷疑是不是路徑跳轉的規則變了。其實路徑的規則始終沒變,問題主要是由web.xml中的虛擬路徑引起的。接下來詳細分析下:

case1:普通頁面中的跳轉

假設當前頁面的路徑為:http://localhost:8080/projectname/index.jsp,在頁面有個表格,設定表格提交的跳轉路徑就有相對路徑和絕對路徑兩種方式:

  1. 相對路徑跳轉 action="nextpage.jsp": 表示跳轉到路徑:http://localhost:8080/projectname/nextpage.jsp。
  2. 絕對路徑跳轉 action="/nextpage.jsp": 表示跳轉到路徑:http://localhost:8080/nextpage.jsp。

case2:Servlet中的路徑跳轉:

假設Servlet的路徑為:http://localhost:808o/projectname/servlet/AjaxMailCheckServlet(web.xml中Servlet標籤中url-pattern下生成的虛擬路徑),現在要在Servelt中做邏輯判斷以後跳轉,那麼就有相對路徑和絕對路徑兩種跳轉方式:

  1. 相對路徑跳轉,表示相對於當前Servlet路徑。例如:response.sendRedircet("nextpage.jsp")表示轉發到:http://localhost:8081/projectname/servlet/nextpage.jsp。
  2. 絕對路徑跳轉,以"/"開頭,表示相對於整個專案根目錄下的路徑,例如response.sendRedircet("/newsDetailList.jsp")表示轉發到:http://localhost:8081/newsDetailList.jsp。

對比case1和case2,不難發現:

  • 絕對路徑跳轉是完全相同的,不會因為是在Servlet中跳轉而受到影響。

相對路徑跳轉則有了差異:http://localhost:8080/projectname/nextpage.jsp/http://localhost:8081/project/servlet/nextpage.jsp。在Servlet的路徑中多了一層servlet路徑。多出這個是因為web.xml中的虛擬路徑引起的,讀者仔細觀察就能發現。其實相對路徑跳轉的規則依舊適用。

同樣的,過濾器,監聽器路徑生成的機制都跟Servlet類似,如果在過濾器,監聽器中有頁面跳轉的話,如果用相對路徑也容易出現相同的問題。