组件必知必会|那些年我们使用过的轮子—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系列更多文章,谢谢大家支持!
所见所领,皆是生活。慢慢来,努力一点,你我共同成长...
点点点,一键三连都在这儿!
- 点赞
- 收藏
- 关注作者
评论(0)