servlet中的过滤器filter 和 SpringMVC中的拦截器interceptor 两者的异同

今天被这个问题困扰了将近一个小时:将在SpringMVC的核心配置文件中配置的“释放静态资源”(配置标签为:)的根本原因误以为是因为释放拦截器interceptor拦截的资源,经过不断地查资料和测试,也更深刻地理解两者的异同:

两者之间的相似点
都可用于对处理器进行预处理和后处理;

两者之间的不同点
1、使用范围
过滤器filter:是servlet中的三大组件之一,任何Java web工程都可以使用;
SpringMVC中的拦截器interceptor:是属于SpringMVC的,只有使用了SpringMVC框架的工程才能使用。
2、拦截范围
过滤器filter:在url-pattern中配置了/*之后,可以对所有资源进行拦截,包括jsp、静态资源html等。
SpringMVC中的拦截器interceptor:只会拦截访问的控制器方法,即handler,而不会拦截jsp、静态资源html等。

对于今天遇到的这个问题一直迷的原因也总结了一下,测试时,同时配置了dispatcherServlet 和 interceptor,
首先,刚开始测试的是jsp资源,jsp资源属于动态资源,对其进行访问,无论是否释放静态资源,都可以访问该jsp资源,对能否访问到没影响。但是当访问html资源时,开启静态资源释放可以访问到,关闭静态资源释放时就访问不到,结果不同;
其次,混淆了释放静态资源的根本原因不是因为配置的interceptor,interceptor不会拦截静态资源,而是因为配置的servlet。

你可能感兴趣的:(Java,SpringMVC,interceptor,拦截器,SpringMVC,servlet,interceptor,filter)