最近工作碰到了一个问题:
项目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三大器(过滤器、拦截器、监听器)概念梳理的更多相关文章
-
SpringBoot 过滤器, 拦截器, 监听器 对比及使用场景
1. 过滤器 (实现 javax.servlet.Filter 接口) ① 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁. ② 可以对请求的URL进行过滤, 对敏感词过滤, ...
-
JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用
JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...
-
MVC中的过滤器/拦截器怎么写
创建一个AuthenticateFilterAttribute(即过滤器/拦截器) 引用System.Web.Mvc; public class AuthenticateFilterAttribute ...
-
Python 入门之 Python三大器 之 装饰器
Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...
-
JavaWeb框架_Struts2_(三)---->;Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
-
JavaWeb 三大器--Listener、Filter 和Interceptor 总结
说明:web.xml的加载顺序是:[Context-Param]->[Listener]->[Filter]->[Servlet],而同个类型之间的实际程序调用的时候的顺序是根据对应 ...
-
struts2拦截器+监听器 .
一.拦截器是怎么实现: 实际上它是用Java中的动态代理来实现的 二.拦截器在Struts2中的应用 对于Struts2框架而言,正是大量的内置拦截器完成了大部分操作.像params拦截器将http请 ...
-
springboot jsp,过滤器,拦截器
springboot使用jsp,过滤器,拦截器(拦截器与过滤器区别重点) jsp使用配置 一 创建springboot项目在maven中暂时只添加两个Dependencies :devtools(热部 ...
-
过滤器 拦截器 登录login实例
当请求来的时候,首先经过拦截器/过滤器,在经过一系列拦截器/拦截器处理后,再由再根据URL找到Servlet.执行servlet中的代码. 过滤器:按照过滤的对象类型的不同,可分为按资源名过滤和按请求 ...
随机推荐
-
VirtualBox安装Ubuntu教程
1.VirtualBox虚拟机安装,及VirtualBox安装Ubuntu教程VirtualBox版本为VirtualBox-4.3.12-93733-Win.exe,Ubuntu版本为ubuntu- ...
-
MongoDB.WebIDE:升级版的Mongodb管理工具
很早以前收藏了一片文章:<强大的MongoDB数据库管理工具>.最近刚好要做一些MongoDB方面的工作,于是翻出来温习了一下,用起来也确实挺方便.不过在使用过程中出现了一些个问题,加上更 ...
-
Minimum Inversion Number_线段树||树状数组
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
-
(转载)C++ ofstream和ifstream详细用法
原文出自[比特网],转载请保留原文链接:http://soft.chinabyte.com/database/460/11433960.sh [导读] ofstream是从内存到硬盘,ifstream ...
-
Codis使用教程
1. Codis集群的搭建与使用 http://www.cnblogs.com/xuanzhi201111/p/4425194.html https://github.com/CodisLabs/co ...
-
codevs 2449 骑士精神 (IDDfs)
/* 限制步数 写迭代加深 注意剪枝:当先步数+不同的个数-1>当前限制的步数 就cut */ #include<cstdio> #include<cstring> #i ...
-
apache安装扩展模块
apache 安装扩展模块 1,首先要确认你是否加载了mod_so模块,这个就是你在编译前参数配置的时候添加-enable-so(启用DSO).如果你没有这模块的话,是无法安装扩展模块的. /usr/ ...
-
[poj 1144]Network[Tarjan求割点]
题意: 求一个图的割点. 输入略特别: 先输入图中点的总数, 接下来每一行首先给出一个点u, 之后给出一系列与这个点相连的点(个数不定). 行数也不定, 用0作为终止. 这样的输入还是要保证以数字读入 ...
-
[Caffe]使用经验积累
Caffe使用经验积累 本贴记录Caffe编译好了,使用过程的常用命令与常见错误解决方式.如果对编译过程还存在问题,请参考史上最全的caffe安装过程配置Caffe环境. 1 使用方法 训练网络 xx ...
-
Pytorch学习笔记(一)Numpy SciPy MatPlotlib Tutorial
英文原文链接:http://cs231n.github.io/python-numpy-tutorial/ Numpy Numpy是Python中科学计算的核心库.它提供了一个高性能的多维数组对象,以 ...