过滤器的作用不论是在前端和后端都存在非常重要的作用,但是其实现还是非常简单的。原理图:
[图片上传失败...(image-9de27e-1551666962606)]
在开发中过滤器有有一个什么样的角色?
在实际开发与前端对接时,前端开发者传输过来的数据一般是UTF-8格式的,而JSP中却不是这种默认格式。因此,我们需要将数据和页面格式相匹配。
但是,后端服务中不可能说只有一个控制器。在View与Controller的交互中,往往非常多的请求服务页面,因此如果每个页面都去设置一个设置编码语句,不久造成不必要的代码重复了吗?因此过滤器在其中扮演着规则的角色。我制定的规则,在我过滤的范围内都需要执行。
过滤器API
只需要实现Filter接口,和它的三个生命周期方法就能够使用了
其中init()和destory()和Servlet一样的作用。其中的精髓还是在于doFilter方法,它有三个参数ServletRequest,ServletResponse,FilterChain,前面两个都很熟悉,而FilterChain非常陌生那么它是什么呢?
FilterChain????
我们看一下它的源码:
public interface FilterChain {
void doFilter(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws java.io.IOException, javax.servlet.ServletException;
}
看的出,它是一个interface接口。里面依旧是两个参数ServletRequest,ServletResponse。
其实在一个企业级项目中往往存在非常多的过滤器,比如在过滤编码的同时,还需要过滤登录状态,然后也需要过滤一些关键字......等等非常多过滤需求,一层一层过滤下去
[图片上传失败...(image-403c27-1551666962606)]
可以看的到,第一个过滤器执行了,如果碰到FilterChain的话会执行第二个过滤器,当执行完所有过滤操作后,从内向外依次关闭。
Filter的配置
有两种方法可以配置Filter,第一种是web.xml配置路径,范围,默认值,
FilterDemo1
FilterDemo1
word_file
/WEB-INF/word.txt
FilterDemo1
/*
第二种是通过注解:
@WebFilter(filterName = "FilterDemo1",urlPatterns = "/*")
过滤器是一个非常常见的东西,但是用处也是非常大的。