Spring MVC静态资源访问

最近在学习servlet的时候发现自己不能访问到css和js, 于是google一番学到不少方法加载,总结如下:

1.对于Spring MVC, 由于我们截获了所有请求<url-pattern>/</url-pattern>,也就包括了对css访问的请求,所以Spring提供了加载静态资源标签<mvc:resources mapping="/style/**" location="/style/"/>,如此我们就可以直接用url直接访问资源文件。

2.我们还可以采用default servlet mapping来截获请求,访问我们目标资源,这里又有一些知识得分享,那就是mapping的优先级

从高到低 >Exact match (like /style/a.css )

            >Path match (like /style/*)

            >Extension match (like /*.jsp) 

所以我们可以添加一个    

                           <servlet-mapping>

                                      <servlet-name>default</servlet-name></p>

                                      <url-pattern>/css/*</url-pattern></p> 

                            </servlet-mapping>      

通过这个Mapping来截获请求,让静态资源得以访问.

 

3. 第三种方式是添加一个Filter ,在请求达到或离开servlet之前进行一些处理,所以我们可以过滤掉关于静态资源的请求

     

  <filter>

        <filter-name>resource</filter-name>

        <filter-class>com.thought.Filter</filter-class>

   </filter>

   <filter-mapping>

       <filter-name>resource</filter-name>

       <url-pattern> /*</filter-mapping>

   </filter-mapping>

 

然后实现doFilter()方法

  String uri = ((HttpServletRequest) request).getRequestURI();

    if (uri.startsWith("/css")) {

        chain.doFilter(request, response); // Goes to container's default servlet.

    } else {

        request.getRequestDispatcher("/" + uri).forward(request, response);

    }

这样就可以跳过对静态资源的请求截获了。

 

4.在得到祁兮同志的建议后,加上我的实验,在spring3.0后又有一种方法来截获静态文件: 

在配置文件中添加 <mvc:default-servlet-handler/>

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

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

 

 

希望对大家能有帮助,谢谢

posted @ 2013-09-15 20:19  Facilitate  阅读(2294)  评论(0编辑  收藏  举报