美文网首页
[096]技术-filter和责任链模式

[096]技术-filter和责任链模式

作者: shawnxjf | 来源:发表于2017-12-16 21:49 被阅读0次

什么是filter

在tomcat servlet容器汇中,我们通过filter来拦截请求和相应来进行一些特殊的处理,比如统一对web请求进行编码转换等。
其请求模式为
request ---> filterA.before ---> fiterB.before ---> web容器处理 ----> filterB.after ---->filterA.after.

那么在代码中如何实现这种请求模式呢?这就用到责任链模式。

责任链模式

我们再web.xml中会定义一些filter,其代码所示:

 <filter>A</filter>
 <filter>B</filter>

那么其相应的伪代码为:

A{
    A.before();
    {
       B.before()
       chain.filter
       B.after()
    }
    A.after();
}
}

在容器启动的时候我们会读取web.xml文件,生成一个List<filter>filterList 作为全局参数,把它放入filterchain对象中。

    A.dofilter(request,response,filterChian)
    {
        dosomething A before ...
        filterIterator = filterChian.getFilterIterator();
        filetChain.doFilter();
        dosomething  A after ...
    }
//filterChain
filterChain.dofilter(request,response,filterChian)
{
    filterIterator = this.getFilterIterator();
    fiter f = filterIterator.next(); //filterchain作为参数在各filter之间传递,所以能够取到链条上的各个A->B->C
    f.filter(request,response,this); //比如此时f为A,那么调用A.filter(){  filterIterator.next() }获取的就是B
}

责任链模式的应用

在spring 拦截器,web 应用的filter中都是使用责任链模式来处理这些 链条调用问题。

相关文章

网友评论

      本文标题:[096]技术-filter和责任链模式

      本文链接:https://www.haomeiwen.com/subject/csuewxtx.html