java中的Filter过滤器

里面主要有三个方法:

init()初始化方法;

doFilter()方法;
该方法里有一个chain.doFilter();在他之前都属于请求过滤,在他之后都属于相应过滤!(走到该方法的时候会走去下一个过滤器,没有下一个过滤器会执行最后的servlet)
加入走了一个a.do的servlet,会先走到第一个filter,然后走到第二个filter,没有filter之后,走a.do,会再执行第二个filter中chain.filter()方法下面的代码,最后执行第一个filter的chain.filter()下面的方法.
filterServlet的执行顺序是根据web.xml中的filter-mapping的标签顺序来执行的.
要是不用web.xml中的标签来配置过滤器,是用的注解配置的话,就根据类名的ascii码值来判断先后,

destory()方法;

下面的贴上源码:

public interfance Filter{
//在这里提示一下,接口中有default 关键字的方法可以不用重写
	void default init(FilterConfig var1) throws ServletException;

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    void default  destroy();
}
过滤器的优先级都是比普通的servlet高的,要是filter和其他servlet有同一个请求路径,肯定是先执行filter里面的代码!

值得注意的是filter使用了责任链设计模式

我们来看一个代码如下图:
责任链设计模式示例代码
上图代码的执行顺序就和filter的执行顺序是一样的,而里面的方法调用顺序已经在编译的时候就确定了,要是你想改变顺序,就得违背ocp原则改动源代码了.

但是!

我们的filter就不同了,过滤器在编译阶段不会确定调用顺序,我们可以在web.xml文件中动态调换顺序!所以说,我们就算要往里面添加过滤器,调换过滤器顺序,根本就不需要动我们的java程序!这就是责任链设计模式,希望以后需要这种设计需求的时候可以想到我们的filter过滤器!

责任链设计模式的核心思想:
       动态组合程序的调用顺序

也正因为如此,我们一般设置过来不起路径的视乎都是用web.xml文件来设置的,否则无法发挥责任链设计模式的最大优点.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值