大家好,我是程序员牛肉。
相信很多同学都会都会在自己的简历上写“了解Spring MVC”,结果面试官一问:“介绍一下Spring mvc中的过滤器和拦截器”。瞬间傻了眼。
你了解什么是过滤器和拦截器以及他们二者的区别嘛?如果不了解的话,就看看这篇文章吧。
「Spring MVC PART1
过滤器」
在Spring MVC中,过滤器(Filter)是一种用于拦截请求和响应的组件,可以在请求到达控制器之前或响应发送给客户端之前对它们进行处理。过滤器主要用于以下目的:
生命周期:
过滤器的生命周期通常与Web应用程序的生命周期相同。当Web应用程序启动时,过滤器被初始化;当Web应用程序关闭时,过滤器被销毁。
并且Spring MVC允许多个过滤器组成一个过滤器链。请求首先通过第一个过滤器,然后依次通过过滤器链中的其他过滤器,最后到达控制器。响应则按相反的顺序通过过滤器链。
尝试注册一个过滤器:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFilters(FilterRegistry registry) {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
registry.addFilter(characterEncodingFilter);
}
}
在这个例子中,我们创建了一个字符编码过滤器CharacterEncodingFilter,并将其注册到Spring MVC的过滤器链中
「Spring MVC
PART1
拦截器」
Spring MVC中,拦截器(Interceptor)是一种用于拦截请求和响应的组件,类似于过滤器,但提供了更多的灵活性和控制能力。拦截器主要用于以下目的:
拦截器的生命周期:
拦截器的生命周期与请求的生命周期相关。每个请求都会创建一个新的拦截器实例,请求结束后,拦截器实例会被销毁。
Spring MVC允许多个拦截器组成一个拦截器链。请求首先通过preHandle方法,然后依次通过拦截器链中的其他拦截器的preHandle方法,最后到达控制器。响应则按相反的顺序通过拦截器的postHandle和afterCompletion方法。
尝试创建一个拦截器:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**") // 拦截所有请求
.excludePathPatterns("/ignore", "/api/**"); // 排除某些路径
}
}
SPRING HAS ARRIVED
过滤器与拦截器的区别
过滤器和拦截器的区别:
实现方式:
调用时机:
调用顺序:
作用范围:
事务管理:
我们用一张图就可以很好的描述过滤器和拦截器的作用范围:
相信通过我的介绍,你已经了解什么是拦截器和过滤器,希望我的文章可以帮到你。