如果在web.xml中,中央调度器(DispatcherServlet)的映射路径为/,将导致静态资源无法正常访问,但是解决方式也是有的。
解决方式一:
因为Tomcat提供了一个默认的Servlet,用来处理请求。(以下是Tomcat自带web.xml中配置的默认Servlet)
所以可以将静态资源映射到Tomcat默认的Servlet上
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>解决方式二:在springmvc.xml下添加mvc标签(此配置会将对静态资源的访问请求通过HandlerMapping映射到默认Servlet请求处理器DefaultServletHttpRequestHandler对象。
而该处理器调用了Tomcat的DefaultServlet来处理静态资源的访问请求)
要使用mvc标签,必须引入mvc约束
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd<mvc:default-servlet-handler/>解决方式三:也是使用mvc标签(location配置的静态资源路径,mapping配置的是对该资源的请求)
该配置会把对该静态资源的访问请求经HandlerMapping直接映射到静态资源处理器对象ResourceHttpRequestHandler
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
本文介绍了当Spring MVC的DispatcherServlet映射路径设置为根路径时,如何解决静态资源无法正常访问的问题。提供了三种解决方案:一是通过servlet-mapping配置让特定类型的静态资源由Tomcat的默认Servlet处理;二是使用spring的mvc:default-servlet-handler配置,让所有未被控制器处理的请求都交给默认Servlet处理;三是利用mvc:resources配置直接映射静态资源。
1964

被折叠的 条评论
为什么被折叠?



