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


浙公网安备 33010602011771号