spring mvc 不拦截静态资源

来源:互联网 发布:windows官方主题 编辑:程序博客网 时间:2024/06/03 00:02
当我们在web.xml配置spring mvc 的前端控制器(DispatcherServlet)时,经常会配置"/"来拦截所有请求,但是前端的css,js,html等文件都会被拦截点,这并不是我们所期望,和看到的,下面我们介绍三种方法解决访问静态资源问题。
<servlet>  <servlet-name>SpringMVC</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>  </servlet><servlet-mapping>  <servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
方案一:激活Tomcat的defaultServlet来处理静态文件
<servlet-mapping>         <servlet-name>default</servlet-name>        <url-pattern>*.html</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> 

在上面可以配置多项,当然这些应该写在DispatcherServlet的前面,让 defaultServlet先拦截,这个就不会进入spring mvc 了 。

方案二: 配置资源映射 mvc:resources 

<mvc:resources mapping="/css/**" location="/css/" /><mvc:resources mapping="/js/**" location="/js/" /><mvc:resources mapping="/html/**" location="/html/" />
使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问.另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler就是ResourceHttpRequestHandler,否则无法处理static resources request

方案三 ,使用<mvc:default-servlet-handler/>

<mvc:default-servlet-handler/>  
会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回.DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.




原创粉丝点击