Filter -> Servlet -> Interceptor -> Controller -> Interceprot -> Servlet -> Filter
过滤器 Filter:
基于函数回调,使用责任链模式。
每个 Filter 中会保存下一个 Filter 的引用,在 doFilter 的时候,可以选择是否要调用下一个 Filter。
而最后一个 Filter 应该接着 Servlet。
依赖于 Servlet 容器,比如 Tomcat,需要容器去完成 Filter 的实现
Demo:
创建 javax.servlet.Filter 的实现类,覆写三个方法:
@Componentpublic class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("MyFilter init");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("MyFilter doFilter");chain.doFilter(request, response);System.out.println("MyFilter doFilter");}@Overridepublic void destroy() {System.out.println("MyFilter destroy");}}
@Configurationpublic class FilterConfig {}
拦截器 Interceptor:
基于 Java 的反射机制
