本文共 2572 字,大约阅读时间需要 8 分钟。
过滤器是一个运行在服务端的程序,在与之相关的Servlet或JSP页面之前运行,实现对请求资源的过滤功能。
Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。
过滤器可附加到一个或多个Servlet或JSP页面上,可以检查请求信息,也可以处理响应信息。
Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet执行前后实现一些特殊的功能。
过滤器常用实例:
过滤器的编写流程
Filter声明周期及其与生命周期相关的方法:
Filter接口有三个方法,并且这三个都是与Filter的生命相关的方法。init(Filterconfig):
代表filter对象初始化方法,filter对象创建时执行doFilter(ServletRequest, ServletResponse, FilterChain):
代表filter执行过滤的核心方法,如果某资源已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法destory():
代表filter的销毁方法,当filter对象销毁时执行该方法Filter对象的声明周期:
FilterAPI详解:
@Overridepublic void init(FilterConfig filterConfig) throws ServletException { //参数config代表该Filter对象的配置信息的对象,内部封装的是该filter的配置信息。}
@Overridepublic void destroy() { //Filter对象销毁时执行}
@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //ServletRequest、ServletResp:每次在执行doFilter方法时,web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。 //该request和response就是在访问目标资源的service方法时的request和response //FilterChain:过滤链对象,通过该对象的doFilter方法可以放行该请求}
myFilter pers.zhang.filter.MyFilter myFilter /* REQUEST
Filter:
package pers.zhang.filter;import javax.servlet.*;import java.io.IOException;import java.util.Date;/** * @author zhang * @date 2019/9/20 - 22:20 */public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("filter创建了..."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println(new Date().toString()); //放行请求 filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("filter销毁了..."); }}
配置Filter:
myFilter pers.zhang.filter.MyFilter myFilter /*
启动服务器,控制台输出:
filter创建了...
使用浏览器访问web下任意资源,控制台输出:
Fri Sep 20 22:48:22 CST 2019
关闭服务器,控制台输出:
filter销毁了...
转载地址:http://bisqb.baihongyu.com/