四、Filter的生命周期
1、Filter的生命周期描述
Filter的创建和销毁是由web服务器负责。Web应用程序启动的时候,Web服务器创建Filter的实例对象,并调用其init方法进行初始化的操作(Filter对象只会创建一次,init方法也只会执行一次)
每次Filter进行拦截的时候,都会执行doFilter的方法
当服务器关闭的时候,或者应用从服务器中移除的时候,服务器会销毁Filter对象
2、FilterConfig对象的概述
(1)FilterConfig对象的作用:
用来获得Filter的相关的配置的对象
(2)FilterConfig对象的API
getFilterName()
getInitParameter(String name)
getInitParameterNames()
getServletContext()
3、FilterConfig的演示
五、过滤器的相关配置
1、<url-pattern>的配置
完全路径匹配:以/开始,例如/aaa /aaa/bbb
目录匹配:以/开始,例如/* /aaa/* /aaa/bbb/*
扩展名匹配:不能以/开始,以*开始,例如*.jsp *.do *.action
2、<servlet-name>的配置
专门以Servlet的配置的名称拦截Servlet
3、<dispatcher>的配置
默认的情况下,过滤器会拦截请求,如果进行转发(需要拦截这次转发)
dispatcher的取值有四个:
REQUEST:默认值。默认过滤器拦截的就是请求
FORWARD:转发
INCLUDE:页面包含的时候进行拦截
ERROR:页面出现全局错误页面跳转的时候进行拦截
(十一)权限验证过滤器
一、案例需求
现在一个网站上需要有登录的功能,在登录成功后,重定向到后台的成功页面(后台的页面有很多)。如果现在没有登录,直接在地址栏上输入后台页面地址
编写一个过滤器,可以对没有登录的用户进行拦截(没有登录,回到登录页面;如果已经登录,放行)
二、案例登录功能
1、创建表(MySQL执行如下语句)
create database web05 charset utf8;
use web05;
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20)
)charset utf8;
insert into user values (null,'aaa','123');
2、搭建项目的环境
3、代码实现
三、权限验证的过滤器实现
(十二)通用的字符集编码过滤器的分析
一、案例需求
假设网站需要向后台提交中文的数据(有可能是GET,也有可能是POST),中文处理根据不同的请求方式,处理的方式也是不同的
需要调用request.getParameter();方法接收数据,但是这时会存在乱码,如果想调用request.getParameter()方法,无论是get还是post请求,提交的中文都没有乱码
二、增强一个类的方法
1、通过上面的分析,现在要增强request的getParameter方法,增强的过程要写在过滤器当中
(1)如何增强一个类中的方法?
1)继承
必须要能够控制这个类的构造
2)装饰者
被增强的类和增强的类需要实现相同的接口
在增强的类中获得被增强的类的引用
缺点:接口中的方法过多,会导致要重写很多其他的方法
3)动态代理
类需要实现接口