前提条件是web.xml设置<url-pattern>/</url-patten>
原理:
设置为/,并不会override任何其他的servlet。它只是替换了servlet容器内置的默认servlet的部分功能,用于所有对于其他注册servlet都不匹配的请求。通常情况下,对静态资源(CSS/JS/image)以及directory listings(/register,etc)这样的请求会触发。
而servlet容器内置的默认servlet 还能够处理 HTTP 缓存请求、媒体 (音频/视频) 流和文件下载恢复等。通常情况下,你并不想重写默认servlet,因为这样你将会有很多的任务要处理,这是不容易的。
依据上面的原理,就有以下两种方式使静态资源不进入DsipatchServlet
方法1:使用容器内置的servlet来处理静态资源,在web.xml文件中配置
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
方法2:使用<mvc:resources>标记
此标记允许静态资源请求遵循特定的 URL 模式
而这个模式是由ResourceHttpRequestHandler中配置的Resource locations list决定的。这提供了一种方便的方法, 可以从 web 应用程序根之外的位置 (包括类路径上的位置) 服务静态资源。在mvc配置文件中配置
<!--配置静态资源可访问 不进行拦截 js目录下/js/的所有文件**-->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:annotation-driven/>
其中
<mvc:annotation-driven/>要配置,原因可能是由于这里遵循了特定的URL模式,那么需要使用此标记注册Spring MVC 需要的DefaultAnnotationHandlerMapping 和AnnotationMethodHandlerAdapter bean(Spring3), 以便将其他请求发送到@Controllers。