springMVC静态资源访问

来源:互联网 发布:java微信商城开源 编辑:程序博客网 时间:2024/05/22 14:44

我们在spring mvc框架中为了使URL更符合RESTful风格,通常在web.xml中会配置spring框架servlet 的 url 拦截为 “/” ,也就是拦截所有资源的url请求,包括静态的资源.css, .html, .htm, .jpg, .js, .png … 等等。但如果不对静态资源访问处理的话,将会出现404错误,所以有了对应servlet的url拦截为“/”的时候,对静态资源访问不应该经过servlet拦截的问题处理(如果 servlet-mapping 的 url-pattern 为 “*.do”,就是只拦截有一定后缀的url,那么就不会有静态资源访问的问题了。)

有以下三种方法:

1.在web.xml中配置多个defaultServlet来处理静态文件,要写在DispatcherServlet的前面, 让defaultServlet先拦截

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

2.在spring-servlet.xml中配置

<mvc:resources mapping="/static/**" location="/static/" />

这种方式可以指定你的静态资源在你项目中的任何位置,包括在jar 里面,因为 配置中的 location 可以配置成 classpath:/com/ctx/…. 的形式

3.在spring-servlet.xml中配置

<mvc:default-servlet-handler/> 

在spring-servlet.xml中配置后,会在springMVC上下文中定义个
org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器(tomcat)默认的Servlet名称是”default”,因此DefaultServletHttpRequestHandler可以找到它。

0 0