优雅 REST 风格的 URL 不希望带 .html 或 .do 等后缀,而如果将 DispatcherServlet 请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求,静态资源的请求找不到对应处理器将导致错误。
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
解决办法:
1、在xml文件中配置<mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
在xml文件中配置<mvc:default-servlet-handler/>,Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,对进入 DispatcherServlet 的 URL 进行筛查,静态资源由 Web 服务器默认的Servlet 处理,非静态资源的请求,由 DispatcherServlet 处理
2、<mvc:resources /> 允许静态资源放在任何地方
<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>
配置将Web根路径 "/" 及类路径下 /META-INF/publicResources/ 的目录映射为 /resources 路径。假设Web根路径下拥有 images、js 这两个资源目录,在 images下面有 bg.gif 图片,在 js下面有 test.js 文件,则可以通过 /resources/images/bg.gif 和 /resources/js/test.js 访问这二个静态资源。
网友评论