Servlet 使用getRequestDispatcher進行請求轉發頁面未跳轉 後臺也未報錯的問題的解決方法
阿新 • • 發佈:2019-01-06
問題描述:
在Servlet中使用getRequestDispatcher進行請求轉發的時候,前端頁面空白未出現報錯,後臺也沒有報錯。
原因分析:
getRequestDispatcher的路徑沒有問題 也存在相應的jsp頁面 前端沒有出現錯誤 後臺也沒有報錯 非常困擾 後面發現是我的Servlet攔截的url有問題
起初我是想搭一個MVC框架 然後想要使用request.getPathInfo擷取請求路徑 然後根據這個路徑轉發到相應的檢視,但是getPathInfo這個方法返回的是相對於請求的serlvet的url的路徑,因此如果servlet的路徑是/的話那麼它返回的便是空,因此我想當然的就將servlet的攔截url設定成了/* 認為/*會匹配諸如/login/user…等等這樣的路徑 卻忘記也會攔截*.jsp,*.html
解決方法 :
很簡單 將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