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 回調(diào)實(shí)現(xiàn)
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執(zhí)行invoked the handler之前
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;
//HandlerAdapter 執(zhí)行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 方法反射實(shí)現(xiàn)烦租,類似aop前延赌,中除盏,后通知。
執(zhí)行順序
Request ---> Filter ---> DispactherServlet ---> HandleMapping ---> HandlerInterceptor ---> Controller ---> HandlerInterceptor ---> Filter ---> Response