java filter的执行顺序_JavaWeb Filter 的执行顺序

JavaWeb Filter 的执行顺序

AFilter 类:

package com.ztesoft.sequence;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

/**

* Servlet Filter implementation class AFilter

*/

@WebFilter("/sequence/test.jsp")

public class AFilter implements Filter {

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

System.out.println("1");

chain.doFilter(request, response);

System.out.println("2");

}

public void init(FilterConfig fConfig) throws ServletException {

}

}

BFilter 类:

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

/**

* Servlet Filter implementation class BFilter

*/

@WebFilter("/sequence/test.jsp")

public class BFilter implements Filter {

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

System.out.println("3");

chain.doFilter(request, response);

System.out.println("4");

}

public void init(FilterConfig fConfig) throws ServletException {

}

}

初始界面:

pageEncoding="UTF-8"%>

Insert title here

To Test Page

拦截页面:

pageEncoding="UTF-8"%>

Insert title here

This is Test Page

System.out.println("5");

%>

运行之后得到的结果为: 1 、 3 、 5 、 4 、 2

原因:

首先,Filter的加载顺序,是由web.xml中配置的的顺序有关,越往前的越先执行,进行目标的拦截。若用FIlter类,改写url-pattern,则加载的顺序与Filter的名字有关,类似于字符串比较大小,越小的越先执行。

本例子中,首先执行AFilter,所以先输出 1 ,而后调用chain.doFilter方法,到下一个Filter,而该方法后面的内容类似于断点,需要进行回执行。所以就执行了 3 ,5 。结束后,开始进行回执行,首先回到较近的Filter ,执行 4 ,最后执行 2 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值