1、过滤器属于Servlet规范,从2.3版本就开始有了。
2、过滤器就是对访问的内容进行筛选(拦截)。利用过滤器对请求和响应进行过滤
1、编码步骤:
a、编写一个类:实现javax.servlet.Filter接口
b、配置web.xml,指定需要过滤的资源。(和Servlet的配置相当类似)
2、过滤器的执行过程(生命周期)
生命周期:
诞生:过滤器的实例是在应用被加载时就完成的实例化,并初始化的。
存活:和应用的生命周期一致的。在内存中是单例的。针对拦截范围内的资源访问,每次访问都会调用void doFIlter(request,response.chain)进行拦截。
死亡:应用被卸载。
一个过滤器接着另外一个过滤器。执行的顺序 按照web.xml的先后顺序
随意 访问 会先直接FilterDemo2 的 再执行 FilterDemo3的
会输出 :
FilterDemo2前
FilterDemo3前
执行内容
FilterDemo3后
FilterDemo2后
四、案例:
将 编码类型写在 Filter参数中
Servlet/JSP:动态资源不要缓存。
这里 将 Servletrequest 和 ServletResponse 转换为 HttpServlet 的方法 避免发生错误
动态过滤掉 Servlet 和Jsp
使用了Md5 加密
Base64编码:很重要
编写
一、装饰
1、编写一个类,实现与被包装类(数据库驱动对Connection的实现)相同的接口。(使这个类和数据库的驱动实现有着相同的行为)
2、定义一个变量,引用被包装类的实例。
3、定义构造方法,传入被包装类的实例。
4、对于要改写的方法,编写自己的代码即可。
5、对于不需要改写的方法,调用原有对象的对应方法。
二、装饰变体(BufferedReader本身就是包装类,对Reader的包装。LineNumberReader,对BufferedReader的包装,还是他的子类)
1、编写一个类,继承已经是包装类的类。
4、覆盖掉需要改写的方法
之前解决了 post 的乱码 问题 这里 添加 get的 解决问题
1.定义一个类 EncodingHttpServletRequest 继承 HttpServletRequestWrapper 前对 后 的 包装 得到自己想要的 方法
2.重写 HttpServletRequestWrapper 的 getParameter 方法 。
3.将get传入的值使用 该 super.getCharacterEncoding()的编码 方式返回
如果 使用 get方法 就可以 得到 应有的编码方式
1.新建 DWHttpServletRequest 类 继承 HttpServletRequestWrapper ,
2.包装 getParameter 发方法 过滤 脏话
3.执行 内容 时 得到的是 DWHttpServletRequest 的 request 所以使用的方法是 DWHttpServletRequest的 getParameter。
方法和前2种类似