在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 />