组件必知必会|那些年我们使用过的轮子—Filter 和 Proxy
前言
过滤器 Filter 是 JavaWeb 三大组件之一,它与 Servlet 很相似,过滤器是用来拦截请求的,而不是处理请求的。当用户请求某个 Servlet 时,会先执行部署在这个请求上的 Filter,如果 Filter“放行”,那么会继承执行用户请求的 Servlet;如果 Filter“不放行”,那么就不会执行用户请求的 Servlet。可以这样理解,当用户请求某个 Servlet 时,Tomcat 会去执行注册在这个请求上的 Filter,然后是否“放行”由 Filter 来决定。可以理解为,Filter 来决定是否调用 Servlet!当执行完成 Servlet 的代码后,还会执行 Filter 后面的代码。
设计模式不是技术,也不是什么框架,只是前人的一个工作的总结,在实现某一个功能的时候,怎样来减少代码之间的耦合性,以及如何实现高内聚低耦合,设计模式说白了就是按照一定的步骤来完成相应的一个功能,这个就称为设计模式。代理 Proxy 是指给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗来讲,代理设计模式就是我们生活中常见的中介。主要用来解决的问题第一个:监控目录一个类里面的方法的执行,第二个:在类里面某一个方法执行的前后动态的植入代码。
本文将带大家详细介绍 Filter 以及 Proxy 的具体原理以及使用。
1、什么是过滤器
「定义:」
过滤器按照我们的理解就是过滤东西的,那么到底这个过滤器能够来过滤啥呢?过滤的是请求
请求:动态资源的请求(Servlet)就是程序在运行的过程中,代码会发生改变,那么这一类的资源请求,就称为动态的网络资源请求
请求:静态资源的请求(css、html、js、img、png...)程序在运行的过程中,代码不会发生改变的那一类请求,就称为静态的网络资源请求
总结:过滤器能够拦截所有的资源请求
2、过滤器的作用
「主要用途:」
用户的身份认证
字符串的和谐
请求的 Servlet 的乱码问题处理
3、过滤器的使用
「使用案例:」
编写一个类,这个类实现于 Filter 接口,并实现里面的方法
在 web.xml 中配置 Filter
测试
总结:Filter 的初始化方法是在程序启动的时候执行的
4、过滤器的生命周期
「生命周期:」
首先在 Web 容器被使用的时候那么 Filter 对象被创建
创建完成之后紧接着调用 init 方法进行 Filter 的初始化
当前端有请求到来的时候,那么这个时候 doFilter 方法被执行
当 Web 容器死亡的时候,那么 destory 方法被执行
init 中 filterConfig 如何使用
5、代理设计模式
「解决的问题:」
问题:代理设计模式到底解决了一个什么问题?
「静态代理:」
静态代理的使用前提:被代理的这个类必须要实现接口
接口的玩法
编辑
编写被代理类
编辑
编写代理类
编辑
测试
「动态代理(JDK 代理):」
使用前提:被代理的类也必须实现接口
被代理的类以及接口的实现和上面类似
代理类的生成和实现
测试
「cglib 代理:」
需求:假设一个类没实现接口?假设我们也需要监听这个类里面的方法的执行呢?
首先导入 cglib 的包
编写代理类
编写测试类
6、基于代理和 Filter 的综合案例
「编码处理的问题:」
原理
字符编码处理的实现
「字符和谐的问题:」
明白一个问题:什么是字符和谐:类似于博客网站上,比如你发表不文明语句不会直接显示出来,而是显示成***等这种现象就称为字符的和谐
要实现字符和谐首先要解决编码问题(上面已经解决了)
在过滤器中设置脏数据
在处理完字符编码问题的时候进行和谐(在处理完编码之后进行调用)
测试
结语
本篇关于过滤器 Filter 及代理 Proxy 的介绍就先到这里结束了,后续会出更多关于 Filter 和代理 Proxy 系列更多文章,谢谢大家支持!
版权声明: 本文为 InfoQ 作者【浅羽技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/5364ee9a30a1dc56e9f8ee2e2】。文章转载请联系作者。
评论