在controller裏面返回 ModelAndView 遇到No mapping found for HTTP request with URI [/WEB-INF/xx.jsp] in Dispatcher的問題,/WEB-INF/xx.jsp被當成request送給 DispatcherServlet所以會有報錯notfound
問題在於<url-pattern>/</url-pattern> 和<url-pattern>/*</url-pattern> 的區別。
<url-pattern>/</url-pattern> only matches the URL host/servlet <url-pattern>/*</url-pattern> matches everything under host/servlet, such as /index.html, /foo.jpg and, most importantly in this case, /WEB-INF/pages/apiForm.jsp the * is the wildcard, which says "anything" In the earlier suggestion, *.do matches anything that ends in .do, for example, /foo.do, /foo/bar.do. It doesn't match anything ending in jsp, so a request for /WEB-INF/pages/apiFrom.jsp is not matched, and is not routed to the DispatcherServlet
但是問題又來了。.css .jpg等也會被攔截 導致圖片 風格不能顯示
解決方法是
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>*.jpg</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>*.js</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>*.css</url-pattern>
- </servlet-mapping>
Tomcat, Jetty, JBoss, and GlassFish 自帶的默認Servlet的名字 -- "default"
Google App Engine 自帶的默認Servlet的名字 -- "_ah_default"
Resin 自帶的默認Servlet的名字 -- "resin-file"
WebLogic自帶的 默認Servlet的名字 -- "FileServlet"
WebSphere 自帶的默認Servlet的名字 -- "SimpleFileServlet"
這種方法對不同的服務器要改defaultservlet 的名稱 個人覺得不是很適用 更好的方法是指定靜態資源位置
在mvc-dispatcher-servlet.xml中
<mvc:resources mapping="/images/**" location="/images/" /><mvc:annotation-driven />