Java Web 中的拦截器和过滤器都是用于处理 HTTP 请求的工具,但它们之间存在一些差异,包括:
- 实现机制:过滤器是基于函数回调,而拦截器是基于 Java 的反射机制。
- 依赖容器:过滤器是 Servlet 规范规定的,只能用于 Web 程序中,依赖于 Servlet 容器(如 Tomcat);而拦截器在 Spring 容器中,不依赖 Servlet 容器。
- 请求拦截:过滤器可以拦截几乎所有的请求(包含对静态资源的请求),而拦截器只拦截 action 请求(不拦截静态资源请求)。
- 获取容器资源:拦截器可以获取 Spring 容器里的对象,而过滤器不行。
- 调用次数:拦截器在 action 的生命周期内可以多次调用,而过滤器只在容器初始化时被调用一次。
- 包裹关系:拦截器是被包裹在过滤器之中。