过滤器Filter

一个FilterChain包括多个Filter。客户端请求request在抵达Servlet之前会经过FilterChain里的所有Filter,服务器响应response在从Servlet抵达客户端浏览器之前也会经过FilterChain里的所有Filter。

一个Filter必须实现javax.servlet.Filter接口。Filter的生命周期:init()和destroy方法只会被调用一次,分别在Web程序加载或者卸载的时候调用。而doFilter()方法每次有客户端请求都会被调用一次。Filter的所有工作也都集中中doFilter()方法中。

doFilter()方法中一定要执行chain.doFilter(request,response).否则request不会交给后面的Filter或者Servlet.

Filter需要配置在web.xml中才能生效。一个Filter需要配置<filter>filter-mapping标签。

多个Filter的执行顺序有先有后。规则是<filter-mapping配置在前面的Filter执行要早于配置在后面的Filter。另外要注意,多个Filter可能会相互影响。

Filter的经典案例
字符编码Filter是最常用的Filter之一,常用来解决Tomcat等服务器里request,response乱码问题。字符编码Filter是在request提交到Servlet之前对request进行指定编码方式的编码。

日志记录Filter:记录日志也是Filter擅长的工作之一。在request之前与之后都可以记录日志。该日志记录Filter使用apache的日志工具记录日志,记录客户的IP地址,访问的URL以及消耗的时间。

异常捕捉Filter
Filter中,如果在chain.doFilter(request,response)上加一个try-catch语句,就能捕捉Servlet中抛出的可预料的与不可预料的异常,然后根据不同的异常进行不同的异常处理。

权限验证Filter
Java web程序一般使用session或者cookie来记录用户是否登录,以及该用户的权限。权限验证Filter是在将request提交给Servlet之前,对session或者cookie进行校验。如果没有相应的登录信息,或者权限不够,则进行相应的处理,比如抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值