JSP课程基础 -- Filter过滤器

过滤器的作用不论是在前端和后端都存在非常重要的作用,但是其实现还是非常简单的。原理图:

[图片上传失败...(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
    /*

子元素用于设置filter的注册名称。**该值必须是在元素中声明过的过滤器的名字

设置 filter 所拦截的请求路径(过滤器关联的URL样式)**

指定过滤器所拦截的Servlet名称**。

指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个
子元素用来指定 Filter 对资源的多种调用方式进行拦截。

第二种是通过注解:

@WebFilter(filterName = "FilterDemo1",urlPatterns = "/*")

过滤器是一个非常常见的东西,但是用处也是非常大的。

你可能感兴趣的:(JSP课程基础 -- Filter过滤器)