很多读者催我写《过滤器和监听器》,所以我又来了。什么是过滤器?我们很容易发现,过滤器可以比作过滤器。让我们想想真正的过滤器能做什么:泡茶时过滤掉茶叶。滤网是如何过滤茶叶的?只要网眼的尺寸小于茶叶,就可以实现过滤!在Web容器中扩展,过滤器可以做:过滤一些敏感字符串【规定不能出现敏感字符串】、避免中文乱码【要求所有web资源使用UTF-8编码】、权限验证等,作用滤镜很重要,只要发挥你的想象力,就能有意想不到的效果。本次PDF一共有“58”页,涉及的PDF内容:过滤器入门及应用监听器入门及应用几个简单的过滤器及监听器面试题过滤器的知识点《在学习某项技术之前,你必须先知道它能做什么。了解了这项技术有什么好处后,让我们了解更多。”知道什么是filter之后,其实也没什么好学的,感觉半天就能搞定,首先我们来认识一下Filter接口和对应的doFilter()方法及其参数。学完我之前的《Servlet》教程,大家应该对doFilter()中的ServletRequest和ServletResponse非常了解,这里就不赘述了,唯一可能比较难理解的就是FilterChain接口FilterChain接口其实就是一个doFilter方法,我们可以这样理解:过滤器不是只有一个,那我们怎么管理这些过滤器呢?在Java中,采用的是链式结构,把所有的过滤器放在FilterChain中,如果条件是遇到了,执行下一个过滤器(如果没有过滤器,则执行目标资源)上面的话似乎有点啰嗦,我们可以想象生活中的例子:现在我想从茶杯中过滤出石头和茶叶。石头在一层,茶叶在一层其他。因此,茶杯的过滤装置应有两层过滤网。这个过滤装置就是FilterChain,过滤石头的过滤器和过滤茶叶的过滤器就是Filter。在石滤器中,茶叶属于下一层,所以放出茶叶,用滤茶器过滤茶叶。茶叶过滤后,剩下的就是茶叶。理解了上面的API之后,我们尝试自己写一个filter(其实就是实现Filter接口,重写doFilter()方法),然后使用annotation/xml配置来部署自己的filter。然后查看FilterChain的执行顺序是否和自己配置的一样,然后写几个常用的过滤应用,比如“禁止浏览器缓存”、“自动登录”、“编码过滤”、“敏感词过滤”“压缩资源”filter""HTMLescapefilter""Cacheddata"...你在工作中是否经常使用“过滤器”?三外工作时间不长,接触了很多系统,所以我们写itourself”,“滤镜”的场景还是不多。但是我觉得有一个东西是可以学好的,那就是“责任链模型”。为什么我之前写了一篇关于“责任链模式”的文章?其实这种设计模式在系统中用的很多,号称可以修复ifelse。过滤器实际上是责任链模型的一个实现。FilterChain逐层执行,直到最后没有过滤器,到达“目标资源”。什么是听众?侦听器是实现特定接口的普通Java程序。本程序专门用于监控Java对象的方法调用或属性变化。当被监控对象发生上述事件时,会立即执行监听器的一个方法。上面这句话应该很容易理解。例如,我有一个SanWai对象,里面有一个eat()方法。每当调用SanWai.eat()时,我的侦听器都可以检测到调用了SanWai.eat(),因此我们可以做一波逻辑并做其他事情。比如三外的女朋友发现三外要吃饭,就给三外打电话让三外少吃一点。回到Servlet层面,我们更多监控的是对象“Session”、“Request”和“ServletContext”的创建/销毁/属性变化。针对以上几个对象的监控,我们可以做一些小例子,比如“网站在线人数统计”、“自动踢人”、“定时清零session值”等。监听器在工作中用的多吗?写业务代码的时候,我也用的不多。我几乎不写监听器的代码。但我认为有必要了解听者的概念。以我的理解,可以认为是“A发生了变化,B需要依赖A的变化来应对”,这就是listener。有人认为这是“事件驱动”?我觉得可以这么理解。Listeners和Filter总结Listeners和Filter可能让我们在工作中“手写”自己的可能性不是很高,但是我觉得这两个技术还是需要了解的。如果你了解Struts2,你会发现Struts2使用过滤器来实现很多功能。Spring源码中也有很多监听器的实现,我觉得大家可以看看。Filters和Listeners还是要了解它的思想,这对我们学习Spring也是很有帮助的。已经工作了一段时间了,为什么我还要写过滤器和监听器?原因如下:我是一个追求排版的人。如果你早期关注我的同学,你可能会发现我的GitHub,articlesread.me导航会经常变化。现在的GitHub导航不太合我胃口(太长),而且老实说,早期文章的排版也不是很好,所以我决定开始新一波。我的文章会发到几个平台,但是文章发表后可能没人看,图床也可能因为平台的防盗链接挂了。又因为很多读者问我:“你能把你的文章转成PDF吗?”给予“坚持”。
