filter 与 interceptor

2017-12-12  本文已影响0人  吃花生的小猴子

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
上一篇下一篇

猜你喜欢

热点阅读