攔截器1,基本攔截器:
package cn.ijava.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class BaseInterceptor implements HandlerInterceptor{
/**
* 在DispatcherServlet之前執行
* */
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("************BaseInterceptor preHandle executed**********");
return true;
}
/**
* 在controller執行之后32313133353236313431303231363533e78988e69d8331333365656530的DispatcherServlet之后執行
* */
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("************BaseInterceptor postHandle executed**********");
}
/**
* 在頁面渲染完成返回給客戶端之前執行
* */
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("************BaseInterceptor afterCompletion executed**********");
//?? ??? ?Thread.sleep(10000);
}
}
指定controller請求的攔截器
public?class?TestInterceptor?implements?HandlerInterceptor?{public?boolean?preHandle(HttpServletRequest?arg0,?HttpServletResponse?arg1,?Object?arg2)?throws?Exception?{System.out.println("************TestInterceptor?preHandle?executed**********");return?true;}public?void?postHandle(HttpServletRequest?arg0,?HttpServletResponse?arg1,?Object?arg2,?ModelAndView?arg3)throws?Exception?{System.out.println("************TestInterceptor?postHandle?executed**********");}public?void?afterCompletion(HttpServletRequest?arg0,?HttpServletResponse?arg1,?Object?arg2,?Exception?arg3)throws?Exception?{System.out.println("************TestInterceptor?afterCompletion?executed**********");}}
在SpringMVC的配置文件中注冊這兩個攔截器
定義一個測試使用的controller:
@Controllerpublic?class?TestController?{@RequestMapping("/test.html")public?ModelAndView?handleRequest(){System.out.println("---------TestController?executed--------");return?new?ModelAndView("test");}}
擴展:java里的攔截器是動態攔截Action調用的對象。
它提供了一種機制可以使開發者可以定義在一個action執行的前后執行的代碼,
也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的方式。
在AOP(Aspect-Oriented Programming)中攔截器用于在某個方法或字段被訪問之前,
進行攔截然后在之前或之后加入某些操作。