您现在的位置是:亿华云 > IT科技
详解Servlet之Filter实现原理
亿华云2025-10-09 15:33:07【IT科技】1人已围观
简介环境:Java8Servlet中Filter使用的设计模式是责任链设计模式。我们可以定义一组Filter然后对数据进行依次的处理。责任链设计模式属于行为型模式。UML图如下:Filter执行流程如下:
环境:Java8
Servlet中Filter使用的详解设计模式是责任链设计模式。我们可以定义一组Filter然后对数据进行依次的实现处理。责任链设计模式属于行为型模式。亿华云计算原理UML图如下:
Filter执行流程如下:
接下来我们来实现一个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) ; }运行结果
按照添加Filter顺序,请求时先添加的实现先执行,企商汇返回时后添加的原理Filter先执行。java web中的详解Filter不也是这样么!!!
b2b信息网很赞哦!(99)
相关文章
- 评估域名涉及的行业规模与发展状况成正比。
- 负载均衡与反向代理(Nginx/OpenResty)
- 痛心:实验室服务器被挖矿怎么办?
- 高压直流与模块化UPS的对比
- 3、商标域名一经注册,就可以作为域名裁决过程中的主要信息之一。这可以大大增加公司被抢注的相关域名胜诉的机会。
- 戴尔“三板斧”与客户共同应对勒索病毒攻击的严峻挑战
- Tomcat 中的 NIO 源码分析
- Nginx搭建前端静态服务器+文件服务器
- 如果你的潜在终端必须是这个米(域名),那么潜在终端并不多,也没有硬通货,那么你的域名应该在终端有兴趣购买时出售。否则,你可能得自己留着吃。
- 【Nginx】如何使用Nginx搭建流媒体服务器实现直播?看完这篇我会了!!