过滤器(Filter)
什么是过滤器
过滤器是一个实现了javax.servlet.Filter接口的Java类。
过滤器的作用
servlet过滤器可以动态地拦截请求和响应,以变化或使用包含在请求和响应中地信息。
可实现地功能
- 在客户端地请求访问后端资源之前,拦截这些请求。
- 在服务器地响应发送会客户端之前,拦截这些响应。
根据规范建议的各种类型的过滤器
- 身份验证
- 数据压缩过滤
- 加密过滤
- 触发资源访问时间过滤
- 图像转换过滤
- 日志记录和审核过滤
- MIME-TYPE链过滤
- 标记化过滤
- XSL/T过滤
过滤器方法
- public void Init(FilterConfig config)
- web应用程序启动时,web服务器将创建Filter实例对象,并调用Init方法,调用web.XML配置,完成对象的初始化功能。(Filter对象只会创建一次,Init方法也只会执行一次)
- public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)
- 该方法完成实际的过滤操作,也就是说对请求和响应的实际处理是写在这个方法里面的
- public void destroy()
- Servlet容器在销销毁过滤器实例前调用的方法,在该方法中释放过滤器使用的资源。
过滤器的使用
-
在web.xml中配置
-
<filter> <filter-name>TestFilter</filter-name> <filter-class>com.filter.TestFilter</filter-class> <init-param> <param-name>charSet</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
-
注解配置
-
@WebFilter(“/*”);
-
@WebFilter 的属性
属性名 类型 描述 filterName String 指定过滤器的 name 属性,等价于 value String[] 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。 urlPatterns String[] 指定一组过滤器的 URL 匹配模式。等价于 标签。 servletNames String[] 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 的取值。 dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。 initParams WebInitParam[] 指定一组过滤器初始化参数,等价于 标签。 asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于 标签。 description String 该过滤器的描述信息,等价于 标签。 displayName String 该过滤器的显示名,通常配合工具使用,等价于 标
-
过滤器的执行顺序(拦截顺序)
- 如果是通过web.xml配置的,其执行顺序是按照的位置自上向下执行。
- 但如果是通过注解配置的话,其执行顺序则是按照过滤器名首字母顺序执行的。