Filter

什么是过滤器

过滤器是一个运行在服务器端的程序,先于与之相关的Servlet或JSP页面之前运行,实现对请求资源的过滤的功能。其基本功能是对Servlet容器调用Servlet的过程行进拦截,从而在执行Servlet前后实现一些特殊的功能。

 

Filter生命周期及其与生命周期相关的方法

1)Filter对象的生命周期:

Filter何时创建:服务器启动时就创建该filter对象

Filter何时销毁:服务器关闭时filter销毁

2)生命周期相关的方法

init(Filterconfig  config):代表filter对象初始化方法 filter 对象创建时执行

其中参数config代表 该Filter对象的配置信息的对象,内部封装是该filter的配置信息。

doFilter(ServletRequest,ServletResponse,FilterCha):代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法

其中的参数:
ServletRequest/ServletResponse:每次在执行doFilter方法时 web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。该request和该response就是在访问目标资源的servlet方法时的request和response。
FilterChain:过滤器链对象,通过该对象的doFilter方法可以放行该请求

destory():代表是filter销毁方法,当filter对象销毁时执行该方法

Filter的访问流程:

过滤器的简单实现

步骤:
1)编写一个过滤器的类实现Filter接口
2)实现接口中尚未实现的方法(着重实现doFilter方法)
3)在web.xml中进行配置(主要是配置要对哪些资源进行过滤)

 

 

Filter的配置

Filter与Listener、Servlet一样,需要设置配置文件

url-pattern配置,类似Servlet配置

 

1)完全匹配  /sertvle
2)目录匹配  /aaa/bbb/* 
/user/*:访问前台的资源进入此过滤器
/admin/*:访问后台的资源时执行此过滤器
3)扩展名匹配  *.abc  *.jsp

 

注意:url-pattern可以使用servlet-name替代,也可以混用

dispatcher:访问的方式(了解)

REQUEST:默认值,代表直接访问某个资源时执行filter
FORWARD:转发时才执行filter
INCLUDE: 包含资源时执行filter
ERROR:发生错误时 进行跳转是执行filter

 

案例一:自动登录

在完成登录时,如果用户勾选“自动登陆”,将在下次登录时,自动完成的登录功能,减少用户再次输入账号和密码繁琐的操作,对用户的操作体验进行优化

login.jsp部分代码:

index.jsp部分代码:

LoginServlet

调用Service层和dao层查询该用户是否存在

PS:调用数据库代码和BDUtils就不写出来了,前面写得太多,具体操作都一个样

AutoLoginFilter

Filter配置设置

 

案例二:解决全局编码

编写Request装饰者实现类,理论需要实现HttpServletRequest接口,然后提供成员变量和构造方法,对接口中所有方法进行处理(增强或不增强),但HttpServletRequest 接口中方法过多,使操作虽然简单,但比较繁琐。javaEE 规范提供了HttpServletRequest 接口得装饰者实现基类HttpServletRequestWrapper,及按照装饰者编写实现类,所有方法都不增强。我们如果需要对方法进行增强,只需要继承该类,然后复写对应方法即可。

PS:需要访问的资源涉及编码问题,可以配置该 filter。另外,该filter还不够完善,只重写了 getParameter(name) 方法,还需要重写 request.getParameterMap();request.getParameterValues(name) 等方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值