filter
package javax.servlet;
import java.io.IOException;
public interface Filter {
public void init(FilterConfig filterConfig) throws ServletException;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public void destroy();
}
基于servlet 回调实现
interceptor
package org.springframework.web.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
public interface HandlerInterceptor {
//前置方法,HandlerMapping 决定映射之后,HandlerAdapter执行invoked the handler之前
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;
//HandlerAdapter 执行invoked the handler之后,DispatcherServlet 渲染view之前
void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;
//方法完成,渲染veiw之后
void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;
}
基于spring 方法反射实现,类似aop前,中,后通知。
执行顺序
Request ---> Filter ---> DispactherServlet ---> HandleMapping ---> HandlerInterceptor ---> Controller ---> HandlerInterceptor ---> Filter ---> Response
网友评论