过滤器
11.1 什么是过滤器
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截
11.2 如何编写过滤器
1、编写java类实现Filter接口
2、重写doFilter方法
3、设置拦截的url
#####11.3 过滤器的配置
11.3.1 注解式配置
在自定义的Filter类上使用注解@WebFilter(“/*”)
11.3.2 xml配置
在web.xml中进行过滤器的配置:
<!--过滤器的xml配置 -->
#####11.4 过滤器链
通常客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器(多个过滤器),那么这组过滤器就称为一条过滤器链。
每个过滤器实现某个特定的功能,一个过滤器检测多个Servlet。(匹配几个,检测几个)。
一组过滤器中的执行顺序与<filter-mapping>的配置顺序呢有关。
当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源
11.5 过滤器的优先级
在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源
如果为注解的话,是按照类名的字符串顺序进行起作用的
11.6 过滤器的初始化参数
在过滤器的创建的时候,可以传递初始化参数
第一种:基于注解的
/**
第二种:基于xml配置
Web.xml实现配置:
<?xml version="1.0" encoding="UTF-8"?>
11.7 过滤器的优点
可以实现 Web 应用程序中的预处理和后期处理逻辑
11.8 过滤器的典型应用
11.8.1 禁止浏览器缓存动态页面
过滤器的代码:
11.8.2 自动登录
创建数据库和用户表
DbHelper类:
package
User类:
public
过滤器代码:
/**
11.8.3 全站压缩
全站压缩就是将服务器的响应结果给压缩为gzip的格式,以便达到浏览器和服务器传输,设置消息头让浏览器自动解压。
过滤器: