小鸦-拦截器和监听器,过滤器的区别

来源:互联网 发布:进程调度算法代码 编辑:程序博客网 时间:2024/05/19 04:52

拦截器 interceptor
监听器 listener
过滤器 Filters

文本区别

「监听器」 : 常常是通过实现接口的方式, 也就是”填充”的方式来实现代码. 也就是代码更为具体, 和服务器等具有更强的关联性
「拦截器」 : 则是通过”组合”的方式来实现代码, 则更体现可改造性和平台性, 在Spring MVC中, 更为体现..( 拦截一下就放人= =|| 拦截器该不会是这个意思吧. )
「过滤器」 : = =过滤其实都有拦截的过程… 不过倾向于「出杂」,也就是对内容进行修改.

实现原理 (推测)


监听器, 在实现中, 如观察者模式, 是使用队列的方式

如果让我实现这个操作 , 我可能会这样

  1. 配置各种监听器
  2. servlet进行到特定的生命周期时候, 唤起container进行监听器的检测
  3. 执行监听器的操作

当然, 我认为也有另外一种操作的可能性

  1. 配置各种监听器
  2. container严格控制servlet的生命周期, 即container自身在调用servlet的生命周期的同时, 也进行监听器的操作

这两种方式, 我更倾向于后者, 这样更体现容器的控制与责任.

拦截器, ,实现原理是AOP, 也就是重组字节码的方式, 生成一个「新的class」.

过滤器, 网上看它远离, 操作与拦截器差不多, 应该原理也是差不多
参考链接

扩展: Java的代理模式和回调函数
代理模式和回调方法, 其实相似度也是挺高的. 所以监听器和过滤器,拦截器的区别, 不是因为实现上的不同而导致, 而是抽象点不同而导致. 后者应该是以URL为重点, 前者是以生命周期为重点.

过滤器与拦截器的区别


参考: stackoverflow

过滤器适合需要查看request内容相关操作, 否则则用拦截器
拦截器与spring应该是融合度比较高.

0 0