Servlet頁面跳轉的URL拼接問題
不用Servlet進行開發時間太久,關於其用法的部分知識容易忘記,最近在一個培訓機構做助理教師的時候才重新溫習了一下Servlet的知識,不得不說學習Servlet確實是我們學習
框架知識的一個基礎。
由於經常被問到常常出現的404錯誤,我總結了一下出現的緣由:servlet跳轉和頁面跳轉中相對路徑與絕對路徑跳轉時URL自動拼接的路徑問題。
1.絕對路徑:
a.請求轉發:★ HttpServletRequest.getRequestDispatcher(String).forward(request,response)
如請求的絕對路徑為:“/user/queryUser.do”,
http://localhost:8080/myweb/user/queryUser.do,即請求為request.getRequestDispatcher(" / user/queryUser.do")生成的URL為http://localhost:8080/myweb/user/queryUser.do;
b.重定向:★ HttpServletResponse.sendRedirect(String)
如請求的絕對路徑為:“/user/queryUser.do”,頁面跳轉的路徑是由容器相對於Web應用本身參與URL生成:
reponse.sendRedirect("/user/queryUser.do"),生成的URL為http://localhost:8080/myweb/queryUser.do;
2.相對路徑:
a.請求轉發:★ HttpServletRequest.getRequestDispatcher(String).forward(request,response)
如請求的相對路徑為:"user/queryUser.do",頁面跳轉的路徑是容器相對於原來請求URL目錄(例如:Http://localhost:8080/myweb/admin/queryAdmin.do
生成完整URL為:Http://localhost:8080/myweb/admin/user/queryUser.do,可以注意到user目錄加到了admin後邊,在寫程式的時候需要注意
b.重定向:★ HttpServletResponse.sendRedirect(String) 與請求轉發一樣。