Spring-MVC配置静态拦截器

在Spring-MVC中,当我们将DispatcherServlet请求映射配置为“/”,则Spring MVC将拦截WEB容器的所有请求,包括静态资源(*.js、*.css、*.html、*.png等等)的请求,Spring MVC会将其当成一个普通请求处理,但又因找不到对应处理器而导致错误(404)。

此时,有三种方式为Spring-MVC配置静态拦截器:

  1. 配置默认Servlet映射
    1. 市场上各类服务器(中间件)自带的默认Servlet名字,如图
    2. 在Web.xml文件中,配置<servlet-mapping>节点:
      <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>
                       org.springframework.web.servlet.DispatcherServlet
              </servlet-class>
            <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
              <servlet-name>default</servlet-name>
              <url-pattern>*.js</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>

      即可。

  2. <mvc:resource location="" mapping="">
    1. 允许静态资源放在任何地方,如WEB-INF目录下、类路径下等等,甚至可以将静态资源打包到jar文件中。通过location属性指定静态资源的位置,由于location属性是Resources类型,因此可以使用诸如“classpath:”等资源前缀指定资源位置。依据当前著名的Page Speed、YSlow等浏览器优化原则对静态资源提供优化。故,可以通过cache-period属性指定缓存时间。在接收到静态资源的获取请求时,会检查请求头的Last-Modified值,如果静态资源没有发生变化,则直接返回304相应状态码,提示客户使用浏览器缓存数据,而非将静态资源的内容输出到客户端,以节省带宽、提高程序性能。
    2. 在dispatcher-servlet.xml中
      <mvc:resources location="/script/, /style/" mapping="/resources/*" />
    3. 在jsp文件中
      <script src="<c:url value='/resources/jquery-1.11.3.min.js' />"></script>
  3. <mvc:default-servlet-handler>
    1. 将Spring MVC上下文中定义一个DefaultServletHttpRequestHandler,它将会对进入DispatcherServlet的请求进行筛查,如果发现是没有经过映射的请求,就将请求交由WEB应用服务器默认的Servlet处理,否则,交由DispatcherServlet继续处理。如果WEB服务器默认Servelt名字比较特殊,则需要通过default-servlet-name属性进行指定
    2. 在dispatcher-servlet.xml中
      <mvc:default-servlet-handler/>

 

posted @ 2017-08-17 20:59  Mr-W  阅读(298)  评论(0)    收藏  举报