1. 程式人生 > >Servlet 使用getRequestDispatcher進行請求轉發頁面未跳轉 後臺也未報錯的問題的解決方法

Servlet 使用getRequestDispatcher進行請求轉發頁面未跳轉 後臺也未報錯的問題的解決方法

問題描述:

在Servlet中使用getRequestDispatcher進行請求轉發的時候,前端頁面空白未出現報錯,後臺也沒有報錯。

原因分析:

getRequestDispatcher的路徑沒有問題 也存在相應的jsp頁面 前端沒有出現錯誤 後臺也沒有報錯 非常困擾 後面發現是我的Servlet攔截的url有問題

起初我是想搭一個MVC框架 然後想要使用request.getPathInfo擷取請求路徑 然後根據這個路徑轉發到相應的檢視,但是getPathInfo這個方法返回的是相對於請求的serlvet的url的路徑,因此如果servlet的路徑是/的話那麼它返回的便是空,因此我想當然的就將servlet的攔截url設定成了/* 認為/*會匹配諸如/login/user…等等這樣的路徑 卻忘記也會攔截*.jsp,*.html

此類路徑 因此我的jsp頁面被攔截了自然顯示不出來

解決方法 :

很簡單 將Servlet的url-Pattern設定為/ 不帶萬用字元的這種即可

ps:

關於PathInfo和ServletPath

情況1(path mapping):
@WebServlet("/test1/*")
Request : http://localhost:8080/myapp/test1/first.html
ServletPath : /test1
PathInfo : /first.html

情況2(exact match):
@WebServlet("/test2/t2")
Request : http://localhost:8080/myapp/test2/t2
ServletPath : /test2/t2 PathInfo : null 情況3(extension mapping): @WebServlet("*.do") Request : http://localhost:8080/myapp/test3/t3.do ServletPath : /test3/t3.do PathInfo : null 情況4(default match): @WebServlet("/") Request : http://localhost:8080/myapp/ ServletPath : / PathInfo : null