全面了解Servlet之Filter实现原理
副标题[/!--empirenews.page--]
接下来我们来实现一个Filter Filter.java接口 public interface Filter {
void doFilter(Request request, Response response, FilterChain chain) ;
} FilterChain.java 关键的调用链 public class FilterChain implements Filter{
private List<Filter> filters = new ArrayList<>() ;
private int position = 0 ;
public void doFilter(Request request, Response response, FilterChain chain) { if (position > filters.size() - 1) { return ; } Filter filter = filters.get(this.position++) ; filter.doFilter(request, response, this) ; } // 构建需要调用的Filter链 public FilterChain addFilter(Filter filter) { this.filters.add(filter) ; return this ; }
} Filter相关子类 public class LoginFilter implements Filter {
@Override public void doFilter(Request request, Response response, FilterChain chain) { System.out.println("LoginFilter entry...") ; chain.doFilter(request, response, chain) ; System.out.println("LoginFilter over...") ; }
} public class CharFilter implements Filter {
@Override public void doFilter(Request request, Response response, FilterChain chain) { System.out.println("CharFilter entry...") ; chain.doFilter(request, response, chain) ; System.out.println("CharFilter over...") ; }
} public class GrantFilter implements Filter {
@Override public void doFilter(Request request, Response response, FilterChain chain) { System.out.println("GrantFilter entry...") ; chain.doFilter(request, response, chain) ; System.out.println("GrantFilter over...") ; }
} 客户端 public static void main(String[] args) { LoginFilter loginFilter = new LoginFilter() ; CharFilter charFilter = new CharFilter() ; GrantFilter grantFilter = new GrantFilter() ; FilterChain chain = new FilterChain() ; chain.addFilter(loginFilter).addFilter(charFilter).addFilter(grantFilter) ; Request request = new Request() ; Response response = new Response() ; chain.doFilter(request, response, null) ; } 运行结果 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |