最近在学习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能够找到它。
但愿对你们能有帮助,谢谢