文章目錄
-
- 1.攔截器的作用
- 2攔截器和過濾器的差別
- 3.攔截器快速入門
-
- 1.建立攔截器類實作HandlerInterceptor接口
- 2.配置攔截器
- 3.測試攔截器的攔截效果
- 攔截器執行原理
- 對傳回内容的修改
- 多個攔截器執行流程
# SpringMVC攔截器
1.攔截器的作用
類似于Servlet中的過濾器filter,用于對處理器進行預處理和後處理
将攔截器按一定的順序連結成一條鍊,稱為攔截器鍊,在通路被攔截的方法和字段時,攔截器鍊中的攔截器就會按其之前定義的順序被調用,也是AOP思想的展現。
2攔截器和過濾器的差別
3.攔截器快速入門
1.建立攔截器類實作HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor {
//在目标方法執行之前執行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandler....");
return true;//代表攔截器開關是否打開。
}
//在目标方法執行之後,視圖傳回之前執行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandler....");
}
//在整個流程執行完畢執行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterHandler....");
}
}
2.配置攔截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.bao.intercepetoor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
3.測試攔截器的攔截效果
攔截器執行原理
随着攔截器的執行,首先會通路preHandle方法,如果其傳回結果為false,則會被攔截,不會執行相應的操作。當傳回值為true時,則會執行目标資源,并且執行posthandle和afterhandle方法
對參數内容判斷
System.out.println("preHandler....");
String param = request.getParameter("param");
if ("yes".equals(param)) {
return true;
}else {
request.getRequestDispatcher("/error.jsp").forward(request,response);
return false;
}
對傳回内容的修改
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
modelAndView.addObject("name","itcast");
System.out.println("postHandler....");
}
多個攔截器執行流程
定義在前面的攔截器先執行,定義在後面的先傳回。