最近把我的 project 轉為 spring mvc 的架構,想說可以順便用 spring 的 RESTful。Controller 的 method 大概如下:
1 | (value = "/show_my_page", method = RequestMethod.GET) |
結果 Server 卻丟出類似如下的 error message:WARN PageNotFound:1114 - No mapping found for HTTP request with URI [/myWebApp/WEB-INF/views/myPage.jsp] in DispatcherServlet with name 'dispatcherServlet'
我的 jsp 路徑沒錯,google 了好一陣子也找不到解答,後來看 Spring in Action 第三版裡面建議針對DispatcherServlet 用如下的 url-pattern
1 | <servlet-mapping> |
不建議用以下這種 (我當時一開始的配置)
1 | <servlet-mapping> |
不過它的解釋我看不太懂,應該說它並沒有針對這兩個的不同做解釋。總之,我把 url-pattern 改為 / 之後,就可以正常顯示我的 jsp了 (感動 T^T)
自己的推測:
- url-pattern: /*
DispatcherServlet 會攔截 web app 外部和內部所有的 request,所以當 View 將 request dispatch 給jsp 時會被攔截,而 DispatcherServlet 找不到對應的 method,因此拋出上面那個錯誤 - url-pattern: /
DispatcherServlet 會攔截 web app 外部所有的 request 而不會攔截內部的,所以 View 可以順利的將request dispatch 給 jsp 而不被 DispatcherServlet 攔截