Spring MVC 过滤静态资源访问

Markdown

过滤的必要性

通常来讲,HTTP 请求都会被映射到 DispatcherServlet,进而由具体的类来承接处理,但对于相似 js 或者 css 这样的静态资源则不必这样,由于对资源的获取只需返回资源自己便可,无需作其余处理,那么这时就须要对一系列的资源文件作过滤处理。javascript

首先来看 web.xml 中针对 Spring MVC 的一个必要配置,即让 HTTP 请求映射到 DispatcherServlet:css

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

配置策略

过滤配置要在 springmvc-config.xml 中进行,为了让资源文件不通过 DispatcherServlet,参见以下配置:html

<mvc:annotation-driven />
<mvc:resources mapping="/resources/css/**" location="/resources/css/project1/" />
<mvc:resources mapping="/resources/js/**"  location="/resources/js/project1/" />
<mvc:resources mapping="/*.html" location="/" />

以上代码针对 css 和 js 分别作了配置,且看以下四点说明:java

  1. 静态资源文件实际所在物理路径为:“/resources/css/project1/”。
  2. 在 jsp 页面中的超连接路径(href、src)对应着配置节里的 mapping。实际的路径定义在配置节的 location 中,它可能很长,也许因为历史缘由其命名也不优雅,这时经过 mapping 就能够很优雅的从新表达,让 jsp 页面的代码更简洁明快。
<link href="<c:url value="/resources/css/input.css" />" rel="stylesheet" />
<script src="<c:url value="/resources/js/input.js" />" ></script>
  1. location 属性的末尾必须带上“/”,不然报错。
  2. 只要有任何一项针对资源的映射配置( ),就必需要带上 annotation-driven,反之,则不须要它。
<mvc:annotation-driven />
相关文章
相关标签/搜索