拦截器和过滤器其实都是AOP编程思想的实现。

过滤器:

是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一序列的过滤器对请求进行修改、判断,把不符合规则的请求在中途拦截或修改;也可以对响应进行过滤拦截和修改。

用在哪?
登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等,便于代码重用。

用法:
需要一个过滤器类 然后实现javax.servlet.Filter接口。

public class LoginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException{// 过滤器初始化}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{// ServletRequest是一个接口 而HttpServletRequest是接口的实现// 但有些方法是HttpServletRequest独有的 例如getSession()// HttpServletRequest接口继承自ServletRequest接口 增加了和Http相关的方法// 但是我们可以强制转换HttpServletRequest request=(HttpServletRequest)servletRequest;HttpServletResponse response=(HttpServletResponse)servletResponse;// 若用户没有登录if (request.getSession().getAttribute(USERINFO)==null && request.getRequestURI().indexOf(/user/doLogin.do)==-1){response.sendRedirect(request.getContextPath()+/user/doLogin.do);}// 若用户已经登录 则继续下一个请求(继续访问)filterChain.doFilter(request,response);}@Overridepublic void destroy(){// 过滤器销毁}}

web.xml配置

 <!-- 配置自定义的Filter 实现登录控制 --><filter><filter-name>sessionFilter</filter-name><filter-class>net.zjitc.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>sessionFilter</filter-name><!-- 拦截所有的页面 /斜杠代表在webapp目录下 --><url-pattern>/pages/*</url-pattern><url-pattern>/css/*</url-pattern><url-pattern>/img/*</url-pattern><url-pattern>/failer.jsp</url-pattern></filter-mapping>

过滤器生命周期:

当服务器启动,会创建Filter对象,并调用init方法,只调用一次.

当访问资源,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.

当服务器关闭时,会调用Filter的destroy方法来进行销毁操作

过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

拦截器:
java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。
Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间动态生成字节码。
拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前(preHandle)后(postHandle)执行一段代码,也可以在一个Action执行前阻止其
用法:
自定义一个实现了Interceptor接口的类,或者继承抽象类AbstractInterceptor。

public class RateLimiterInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String params = request.getQueryreturn true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}}

区别:

①拦截器是基于java的反射机制的,而过滤器是基于函数回调。

②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。拦截器可以获取ioc中的service bean实现业务逻辑。

Java拦截器和过滤器的作用和区别相关推荐

  1. 区分Java拦截器和过滤器

    今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...

  2. java 拦截器和过滤器的区别

    介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...

  3. java 拦截器和过滤器区别(转载)

    2019独角兽企业重金招聘Python工程师标准>>> 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调  2.过滤器依赖与servlet容器,而拦截器不依赖与servl ...

  4. 拦截器和过滤器的概念和区别

    什么是过滤器: 过滤器Filter基于Servlet实现,过滤器的主要应用场景是对字符编码.跨域等问题进行过滤, Filter过滤器随着web应用的启动而启动,只初始化一次. Fiter的使用: 继承 ...

  5. java拦截器和过滤器,2021最新版!

    正文 现在市面上的算法资料也五花八门,种类繁多,小编也整理了一份不同于市面且有意思的算法资料,不能说多全面,但是是小编花了很长时间整理归纳出来的,自我感觉还行.分享给同事及群里反响都不错,所以小编打算 ...

  6. java拦截器和过滤器配置,逆袭面经分享

    1. CAP 的由来 要理解 CAP,首先我们要清楚,为何会有人提出 CAP?他提出 CAP 是为了解决什么问题? 时间回到 1985 年,彼时,后来证明了 CAP 理论的 Lynch 教授此时给当时 ...

  7. 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别

    转自:https://www.cnblogs.com/shangc/p/5939708.html 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别.其主要区别为以下几点: 1)拦截器是基于 ...

  8. struts2中拦截器和过滤器的比较

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

  9. 关于SSM框架设置拦截器和过滤器

    我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...

  10. 详解拦截器和过滤器的区别

    拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...

最新文章

  1. 微软发布全新多核心操作系统原型:Barrelfish
  2. 自动售货机编程_Rosmaro中基于视觉自动机的编程简介
  3. Spring.NET企业架构实践之 JQuery + FlexiGrid + ASP.NET MVC + NVelocity + WCF + LINQ + NHibernate 综合应用...
  4. Kotlin实战指南七:单例模式
  5. Wireshark的https代理抓包(whistle中间人代理)
  6. java 中parse_Java中parse()和valueOf(),toString()的区别?
  7. 吴恩达机器学习之线性逻辑回归实现部分
  8. Python密码生成器
  9. Unity 经纬度定位
  10. Python机器学习:基于西瓜数据集的KNN算法实现
  11. c语言break可以跳出for循环吗,怎么跳出for循环
  12. Eureka(6)-- ClusterResolver 集群解析器
  13. 菜鸟站长之家教各位菜鸟站长用WordPress如何给文章生成推广二维码
  14. html5百度地图展示运动轨迹,百度地图根据经纬度获取运动轨迹
  15. 威廉·欧奈尔:为何我的A股账户只持有一只股票?(建议收藏)
  16. 220个绝对离不了的生活窍门
  17. IT职场人生系列之二十三 知识体系(专家与杂家)
  18. smart NAT和full-coneNAT的配置以及应用场景
  19. 电脑桌面卡机了 解决方法:
  20. flash中添加音乐问题

热门文章

  1. dt100g3什么意思_酷黑滑盖风 金士顿DT100G3优盘评测
  2. VS Winform如何设置光标样式
  3. linux驱动无线网卡数据发送,基于Linux的无线网卡驱动程序
  4. [PHPCMS]精美大气自适应资源模板下载网站源码
  5. 前阿里GOC负责人葛梅:运维转型运营,IT服务管理体系搭建实践
  6. 什么是需求跟踪矩阵RTM
  7. ACMer值得看的博客
  8. Objective-c包装类
  9. Trilateration三边测量定位算法
  10. 红帽子linux 命令,红帽子_Linux_命令全解