最近工作碰到了一个问题:
项目A需要收集项目B中的用户活跃数信息,最后通过HttpSessionAttributeListener实现。
在开发过程中,网上查找了过滤器、拦截器、监听器的帖子,这里对自己收集到的知识进行一下梳理。
下面将对他们三个,从概念、应用场景角度进行梳理。

1、过滤器(Filter)

(1)概念

  过滤器说白了,就是实现了javax.servlet.Filter接口的类。

  定义参考servlet api:

public interface Filter

A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. 

(2)应用场景

  开发中主要用到的场景如下两个:

  场景一:用户登录及权限验证

    好多项目,会在Filter中过滤请求,判断用户是否拥有该请求的权限以及是否登录等。

    通常,用户登录之后,会将用户的基本信息、权限信息等,放入session中。

    之后,当用户访问某些请求,会从session中获取该用户权限进行比较,判断是否允许访问。

  场景二:请求响应内容处理

    Filter的doFilter方法中包含request和response两种参数,所以可以对请求、响应的内容进行处理,如:

    请求响应的字符编码

    响应的内容压缩等

  除上述之外,附上servlet api给出的描述

Examples that have been identified for this design are
1) Authentication Filters
2) Logging and Auditing Filters
3) Image conversion Filters
4) Data compression Filters
5) Encryption Filters
6) Tokenizing Filters
7) Filters that trigger resource access events
8) XSL/T filters
9) Mime-type chain Filter

2、拦截器(Interceptor)

(1)概念

  与Filter相比,Interceptor更加侧重拦截。实现或继承了Interceptor的类,就是一个拦截器。

(2)应用场景

  拦截器用到最多的还是未登录拦截,当一个请求到服务器,发现该请求不合法,则跳转到错误页面。

  还有,相对于Filter来说,Interceptor可以注入Bean,所以,可以做更多的逻辑处理,这一点在开发过程中也很实用。

3、监听器(Listener)

(1)概念

  这里只说JavaWeb中使用到的Listener。在web应用中,Listener主要监听对象如下:

    ServletContext对象

    HttpSession对象

    ServletRequest对象

  监听方向有两类:

    对象的生命周期中的各个事件,如创建、销毁等。

    对象属性的创建和销毁。

(2)应用场景

  对Context对象监听,可以在项目启动中初始化某些组件,这些组件在项目启动、终止时进行一些逻辑操作。

  对Session对象监听,可以统计项目的访问人数,登录、活跃人数等。

  对Request对象监听,目前还没应用到,一般针对某些请求的操作,都优先考虑了Filter。

4、小结

  本文主要是对JavaWeb三大组件概念上的梳理,防止在开发过程中组件乱用,概念混淆。

JavaWeb三大器(过滤器、拦截器、监听器)概念梳理的更多相关文章

  1. SpringBoot 过滤器, 拦截器, 监听器 对比及使用场景

    1. 过滤器 (实现 javax.servlet.Filter 接口) ① 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁. ② 可以对请求的URL进行过滤, 对敏感词过滤, ...

  2. JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

    JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...

  3. MVC中的过滤器/拦截器怎么写

    创建一个AuthenticateFilterAttribute(即过滤器/拦截器) 引用System.Web.Mvc; public class AuthenticateFilterAttribute ...

  4. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

  5. JavaWeb之Servlet、拦截器、监听器及编程思想

    本文包含的内容有: Servlet的理解 自定义Servlet.监听器和过滤器 三者的一点点编程设计思想 后续的学习 JavaWeb是Web开发的重要基础,对Servlet.监听器和过滤器等知识的掌握 ...

  6. JavaWeb框架_Struts2_(三)---->Struts2的拦截器

    2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...

  7. JavaWeb 三大器--Listener、Filter 和Interceptor 总结

    说明:web.xml的加载顺序是:[Context-Param]->[Listener]->[Filter]->[Servlet],而同个类型之间的实际程序调用的时候的顺序是根据对应 ...

  8. struts2拦截器+监听器 .

    一.拦截器是怎么实现: 实际上它是用Java中的动态代理来实现的 二.拦截器在Struts2中的应用 对于Struts2框架而言,正是大量的内置拦截器完成了大部分操作.像params拦截器将http请 ...

  9. springboot jsp,过滤器,拦截器

    springboot使用jsp,过滤器,拦截器(拦截器与过滤器区别重点) jsp使用配置 一 创建springboot项目在maven中暂时只添加两个Dependencies :devtools(热部 ...

随机推荐

  1. 新浪、腾讯、淘宝为何如此重视Web前端?前端入门容易吗?

    为什么新浪.搜狐.网易.腾讯.淘宝等在内的各种规模的IT企业,都对web前端越来越重视了呢?小编为您揭晓答案! web前端的由来 以前会Photoshop和Dreamweaver就可以制作网页.随着时 ...

  2. 033_go语言中的打点器

    代码演示 package main import "fmt" import "time" func main() { ticker := time.NewTic ...

  3. Prometheus监控神器-Alertmanager篇(1)

    本章节主要涵盖了Alertmanager的工作机制与配置文件的比较详细的知识内容,由浅入深的给大家讲解. 警报一直是整个监控系统中的重要组成部分,Prometheus监控系统中,采集与警报是分离的.警 ...

  4. java 匿名对象与内部类

    一 匿名对象 1.匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 例如: public class Person{ public void eat(){ ...

  5. .NET或.NET Core Web APi基于tus协议实现断点续传

    前言 前两天我采用技巧式方案基本实现大文件分片上传,这里只是重点在于个人思路和亲身实践,若在实际生产环境要求比较高的话肯定不行,仍存在一些问题需要深入处理,本文继续在之前基础上给出基于tus协议的轮子 ...

  6. 极简 Node.js 入门 - 2.4 定时器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. 在UOS 上部署 django + uwsgi + nginx 流程

    前言:这篇主要是流程,不喜勿喷,虽然我知道在部署过程中 参照博客写的越详细越好. 强大的百度会解决一切的 爬了诸多坑 ,心累,必须总结!! 最近 芯片封锁闹的很凶  支持国产!! UOS 统一操作系统 ...

  8. 【Flutter 实战】一文学会20多个动画组件

    老孟导读:此篇文章是 Flutter 动画系列文章第三篇,后续还有动画序列.过度动画.转场动画.自定义动画等. Flutter 系统提供了20多个动画组件,只要你把前面[动画核心](文末有链接)的文章 ...

  9. SpringBoot+MyBatis整合报错Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    项目启动的时候报这个错误,这个问题我百度了一天,果然不出意外的还是没能解决,其中有一篇文章相对来说还是有点用的:https://blog.csdn.net/qq8693/article/details ...

  10. mycli工具mysql命令自动补全

    简介 MyCli 是一个 MySQL 的命令行客户端,可以实现自动补全和语法高亮.MyCli 也可用于 MariaDB 和Percona. 项目地址:http://mycli.net/ 安装 pip安 ...