过滤器和拦截器的区别:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
过滤器和拦截器触发时机不一样:
过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
总结:过滤器包裹住servlet,servlet包裹住拦截器。
如下图所示:
2.过滤器的触发时机是容器后,servlet之前,所以过滤器的doFilter(
ServletRequest request, ServletResponse response, FilterChain chain
)的入参是ServletRequest ,而不是httpservletrequest。因为过滤器是在httpservlet之前。
3.过滤器
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("before..."); chain.doFilter(request, response); System.out.println("after..."); }
chain.doFilter(request, response);这个方法的调用作为分水岭。事实上调用Servlet的doService()方法是在chain.doFilter(request, response);这个方法中进行的。 4.拦截器是被包裹在过滤器之中的。
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); }
preHandle:在DispatcherServlet之前执行 postHandle:在controller执行之后的DispatcherServlet之后执行 afterCompletion:在页面渲染完成返回给客户端之前执行
总结:拦截器功在对请求权限鉴定方面确实很有用处,在我所参与的这个项目之中,第三方的远程调用每个请求都需要参与鉴定,所以这样做非常方便,而且他是很独立的逻辑,这样做让业务逻辑代码很干净。和框架的其他功能一样,原理很简单,使用起来也很简单,大致看了下SpringMVC这一部分的源码,其实还是比较容易理解的。
我们项目中仅仅用到了preHandle这个方法,而未用其他的,框架提供了一个已经实现了拦截器接口的适配器类HandlerInterceptorAdapter,继承这个类然后重写一下需要用到的方法就行了,可以少几行代码,这种方式Java中很多地方都有体现。
相关推荐
拦截器和过滤器的区别 1. 实现机制:拦截器基于 Java 反射机制,而过滤器基于函数回调。 2. 依赖关系:拦截器不依赖于 Servlet 容器,而过滤器依赖于 Servlet 容器。 3. 作用域:拦截器只能对 Action 请求起作用,...
通过对Struts 2框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...
过滤器和拦截器是两种在Java Web开发中用于处理请求的机制,它们在功能上有相似之处,但在实现方式和使用场景上存在显著区别。这里我们将深入探讨这两种技术,以及它们在Spring MVC框架中的应用。 首先,拦截器是...
在Java Web开发中,Spring MVC框架提供了两种机制来处理请求:拦截器(Interceptor)和过滤器(Filter)。它们都是在请求被控制器处理之前和之后执行的一系列预处理和后处理操作,但它们在功能、使用场景和工作原理...
本文将深入探讨Struts框架中的拦截器(Interceptor)以及它与过滤器(Filter)的区别,并结合文件上传功能进行讲解。 1. 拦截器与过滤器的概念 - **拦截器**:在Struts2框架中,拦截器是基于AOP(面向切面编程)的...
在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...
本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...
过滤器和拦截器的区别 过滤器和拦截器是两个常见的概念在 Java Web 开发中,它们都可以用来对请求进行处理和过滤,但是它们之间有着本质的区别。 首先,从机制上来说,拦截器是基于 Java 的反射机制的,而过滤器是...
"拦截器过滤器.rar"这个压缩包文件很可能包含了一些示例代码或教程,教你如何在Web应用程序中实现请求和响应的过滤与拦截。让我们深入探讨这两种技术。 1. **拦截器(Interceptor)** 拦截器通常在基于MVC(Model-...
在Java Web开发中,拦截器(Interceptor)和过滤器(Filter)是两种常见的处理请求和响应的机制。它们都在请求到达目标Servlet之前进行介入,但各自有着不同的应用场景和功能特点。参数读取则是从客户端传递到服务器...
项目提供的`程序说明.docx`文档应该包含了如何部署和运行此示例的详细步骤,这对于开发者理解和学习拦截器和过滤器的工作机制非常有帮助。`Demo_Struts2_fileter.war`是一个Web应用的归档文件,可以直接在支持...
拦截器(Interceptor)和过滤器(Filter)的区别: 1. 拦截器是基于 Java 的反射机制的,而过滤器是基于函数回调。 2. 过滤器依赖于 Servlet 容器,而拦截器不依赖于 Servlet 容器。 3. 拦截器只能对 Action 请求起...
Filter过滤器与Interceptor拦截器有很多相似
拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...
浅谈基于过滤器与拦截器的用户访问控制,stuts2中拦截器和过滤器的应用
在Web开发领域,过滤器(Filter)和拦截器(Interceptor)是两种常见的机制,它们用于在请求被实际处理之前或之后执行特定的操作。这两种技术在Java Web应用中尤为常见,尤其是使用Servlet API或者Spring框架的时候...
Spring框架拦截器和过滤器:基于Java开发,包含34个文件,包括28个Java类文件、3个XML配置文件、1个.gitignore文件、1个SQL文件和1个YAML配置文件。该项目是关于Spring框架的拦截器和过滤器的设计,过滤器是Java Web...