Spring MVC静态资源访问

最近在学习servlet的时候发现本身不能访问到css和js, 因而google一番学到很多方法加载,总结以下:css

1.对于Spring MVC, 因为咱们截获了全部请求<url-pattern>/</url-pattern>,也就包括了对css访问的请求,因此Spring提供了加载静态资源标签<mvc:resources mapping="/style/**" location="/style/"/>,如此咱们就能够直接用url直接访问资源文件。web

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

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

            >Path match (like /style/*)mvc

            >Extension match (like /*.jsp) app

因此咱们能够添加一个    jsp

                           <servlet-mapping>学习

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

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

                            </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能够找到它。

 

 

但愿对你们能有帮助,谢谢

相关文章
相关标签/搜索