最近研究了下Spring的HandlerInterceptor和Java的Filter,因为经常搞混它们两个,今天整理个笔记记录一下。
HandlerInterceptor 是Spring里面的拦截器
Filter是Java里面的过滤器
共同点 还是贴下Java里面的注释吧,解释还是很到位的:
* <p>A HandlerInterceptor gets called before the appropriate HandlerAdapter
* triggers the execution of the handler itself. This mechanism can be used
* for a large field of preprocessing aspects, e.g. for authorization checks,
* or common handler behavior like locale or theme changes. Its main purpose
* is to allow for factoring out repetitive handler code.
* <p>HandlerInterceptor is basically similar to a Servlet 2.3 Filter, but in
* contrast to the latter it just allows custom pre-processing with the option
* of prohibiting the execution of the handler itself, and custom post-processing.
* Filters are more powerful, for example they allow for exchanging the request
* and response objects that are handed down the chain. Note that a filter
* gets configured in web.xml, a HandlerInterceptor in the application context.
*
* <p>As a basic guideline, fine-grained handler-related preprocessing tasks are
* candidates for HandlerInterceptor implementations, especially factored-out
* common handler code and authorization checks. On the other hand, a Filter
* is well-suited for request content and view content handling, like multipart
* forms and GZIP compression. This typically shows when one needs to map the
* filter to certain content types (e.g. images), or to all requests.
解释下吧:
HandlerInteceptor一般用于权限验证,以及一些处理风格本地化等公共代码。
Filter一般用于修改请求内容和界面的解析处理相关。
Inteceptor的三个方法:
//做实际的请求之前调用 //返回true会接着链式调用 //返回false终止链式调用 boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; //请求之后,解析视图界面之前调用 void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; //解析完界面之后调用 void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; // 在mvc-dispatcher-servlet.xml或者applicationContext.xml中配置 <!--interceptors begin--> <mvc:interceptors> <bean class="com.xxx.AllInterceptor"/> </mvc:interceptors> <!--interceptors end-->
Filter配置
@Component public class RequestLogFilter implements Filter{ @Override public void destroy() { System.out.println("destory"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("doFilter"); chain.doFilter(request , response); } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub System.out.println("init"); } } // web.xml配置 <filter> <filter-name>testFilter</filter-name> <filter-class>com.abcd.system.RequestLogFilter</filter-class> </filter> <filter-mapping> <filter-name>testFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
测试结果顺序:发现filter会在前面处理
init
doFilter
preHandle
postHandle
afterCompletion
相关推荐
标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...
在Java Web开发中,拦截器(Interceptor)与过滤器(Filter)是两种常见的处理请求和响应的技术。它们虽然都用于在请求处理前后执行某些操作,但其实现机制、应用场景以及作用范围等方面存在较大差异。下面将详细...
java中filter跟interceptor区别
浅谈SpringMVC中Interceptor和Filter区别 SpringMVC中Interceptor和Filter是两个重要的概念,它们都是用来处理用户请求的,但它们有着不同的作用和实现机制。本文将详细介绍Interceptor和Filter的区别,帮助读者更...
Java WEB 篇九 Java servlet、filter、listener、interceptor 之间的区别和联系?
在Java Web开发领域,特别是使用Struts2框架时,Filter和Interceptor是两个非常重要的概念。它们都是用来拦截请求并执行特定逻辑的机制,但它们之间存在一些关键的区别。 #### 一、Filter概述 **Filter** 是...
拦截器(Interceptor)是一种在Java Web开发中广泛使用的可插拔组件设计,它允许开发者在不修改核心处理代码的情况下,对请求和响应进行拦截,提供标准化的服务。这种设计模式能够独立地增强系统的功能,提高代码的...
Java Web开发中,Servlet、Filter、Listener和Interceptor这四种组件在处理请求和响应的过程中扮演着不同的角色,它们都是Java EE规范中不可或缺的部分,用于增强应用程序的功能和灵活性。 **1. Servlet** Servlet...
在Web开发中,`filter`、`servlet`、`listener`和`interceptor`都是重要的组件,它们各自承担着不同的职责。以下是它们的详细解释和对比: 1. **Servlet**: - Servlet是一个Java类,用于扩展服务器的功能。它们在...
SpringBoot中使用Filter和Interceptor的示例代码 在SpringBoot框架中,Filter和Interceptor是两个非常重要的概念,它们都可以用来拦截和处理HTTP请求,但是它们的实现机制和使用场景却有所不同。下面将详细介绍...
在Java Web开发中,Spring MVC框架提供了两种机制来处理请求:拦截器(Interceptor)和过滤器(Filter)。它们都是在请求被控制器处理之前和之后执行的一系列预处理和后处理操作,但它们在功能、使用场景和工作原理...
在Java Web开发中,`Filter`是一个至关重要的组件,它属于`javax.servlet`包,用于在请求被实际处理之前和之后进行预处理和后处理。本教程将详细讲解`Filter`的两个主要功能:字符编码过滤和登录验证。 首先,让...
描述:Spring Boot 中如何定义过滤器、监听器和拦截器,对 Spring Boot 编写 Servlet、Filter、Listener、Interceptor 的相关知识感兴趣的朋友一起看看吧 标签:spring boot 编写Servlet Filter Listener Inter ...
Java+Struts2 防盗链(Filter 不可过滤 Action) 防盗链是指防止在没有通过合理的登录界面,直接进入到系统中的机制。其优点是避免在每个页面判断是否获得 session,虽然在里也是判断是否或的 session,但是代码...
本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...
这个中文教程为开发者提供了Struts2框架的详细指南,包括Action、Result、Interceptor、配置文件以及与Spring和其他框架的集成。 3. **Spring2.5-中文参考手册.chm**:Spring是一个全方位的Java企业级应用框架,...
本文将深入探讨"spring-Interceptor-filter-aop:spring mvc和tomcat源码分析"这一主题,旨在揭示这两个核心组件的内部工作原理。 **Spring MVC** Spring MVC是Spring框架的一部分,它提供了一个用于构建Web应用程序...
2. **Spring框架**:Spring是Java Web开发中最广泛使用的框架之一,它不仅提供了MVC框架,还包含依赖注入(DI)和面向切面编程(AOP)等功能,支持事务管理、数据访问、安全控制等。 3. **Struts框架**:Apache ...
理解如何配置servlet-mapping、filter、context-param等元素对于正确运行和调试应用至关重要。 "java_技术参考汇集_超值大礼包"和"ssh.ppt"可能包含了更广泛的Java技术知识点,比如Java基础语法、集合框架、多线程...
在Java Web开发中,Filter模式尤其重要,因为它在Web应用程序中起到预处理请求和后处理响应的关键作用。本例将深入探讨Filter设计模式,以及如何将其与Struts2框架相结合。 首先,Filter模式的核心概念是过滤器链。...