JavaWeb——过滤器和拦截器

过滤器

Filter依赖于servlet容器,基于函数回调实现。

是在请求进入容器之后,还未进入Servlet之前进行预处理。

它可以对几乎所有请求进行过滤,但是一个过滤器实例只能在容器初始化时调用一次。

使用场景:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数

拦截器

依赖于web框架,例如SpringMVC框架。基于Java的反射机制实现,属于面向切面编程(AOP)的一种运用。

拦截器是在请求进入servlet后未到达controller之前执行。

拦截器只对controller请求进行拦截。

可以访问action上下文、值栈里的对象,可以获取IOC容器中的各个bean,例如在拦截器里注入一个service,可以调用业务逻辑。

两者在请求过程中执行的时机可以通过下图表示(网上找的图)

JavaWeb——过滤器和拦截器