mvc:interceptors
標(biāo)簽用于注冊(cè)一個(gè)自定義攔截器或者WebRequestInterceptors歼指】。可以通過(guò)定義URL來(lái)進(jìn)行路徑請(qǐng)求攔截评姨,可以做到較為細(xì)粒度的攔截控制。
- xml配置代碼如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:interceptors>
<!-- 日志攔截器 -->
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/static/**" />
<bean class="攔截器java代碼路徑" />
</mvc:interceptor>
</mvc:interceptors>
</beans>
- 說(shuō)明
1)mvc:mapping 攔截器路徑配置
(一級(jí)目錄 <mvc:mapping path="/.do" /> ;二級(jí)目錄<mvc:mapping path="//*.do" /> )
2)mvc:exclude-mapping 攔截器不需要攔截的路徑
(類(lèi)路徑 或 <ref bean="processResponseInterceptor"/>) - 實(shí)現(xiàn)
implements HandlerInterceptor 或extends HandlerInterceptorAdapter
/**
* preHandle方法是進(jìn)行處理器攔截用的萤晴,顧名思義吐句,該方法將在Controller處理之前進(jìn)行調(diào)用,
* SpringMVC中的Interceptor攔截器是鏈?zhǔn)降牡甓粒梢酝瑫r(shí)存在多個(gè)Interceptor嗦枢,
* 然后SpringMVC會(huì)根據(jù)聲明的前后順序一個(gè)接一個(gè)的執(zhí)行,
* 而且所有的Interceptor中的preHandle方法都會(huì)在Controller方法調(diào)用之前調(diào)用两入。
* SpringMVC的這種Interceptor鏈?zhǔn)浇Y(jié)構(gòu)也是可以進(jìn)行中斷的净宵,
* 這種中斷方式是令preHandle的返回值為false,當(dāng)preHandle的返回值為false的時(shí)候整個(gè)請(qǐng)求就結(jié)束了。
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
/**
* 這個(gè)方法只會(huì)在當(dāng)前這個(gè)Interceptor的preHandle方法返回值為true的時(shí)候才會(huì)執(zhí)行择葡。
* postHandle是進(jìn)行處理器攔截用的紧武,它的執(zhí)行時(shí)間是在處理器進(jìn)行處理之 后, 也就是在Controller的方法調(diào)用之后執(zhí)行敏储,
* 但是它會(huì)在DispatcherServlet進(jìn)行視圖的渲染之前執(zhí)行阻星,也就是說(shuō)在這個(gè)方法中你可以對(duì)ModelAndView進(jìn)行操作。
* 這個(gè)方法的鏈?zhǔn)浇Y(jié)構(gòu)跟正常訪(fǎng)問(wèn)的方向是相反的已添,也就是說(shuō)先聲明的Interceptor攔截器該方法反而會(huì)后調(diào)用妥箕,
* 這跟Struts2里面的攔截器的執(zhí)行過(guò)程有點(diǎn)像,
* 只是Struts2里面的intercept方法中要手動(dòng)的調(diào)用ActionInvocation的invoke方法更舞,
* Struts2中調(diào)用ActionInvocation的invoke方法就是調(diào)用下一個(gè)Interceptor或者是調(diào)用action畦幢,
* 然后要在Interceptor之前調(diào)用的內(nèi)容都寫(xiě)在調(diào)用invoke之前,要在Interceptor之后調(diào)用的內(nèi)容都寫(xiě)在調(diào)用invoke方法之后缆蝉。
*/
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
/**
* 該方法也是需要當(dāng)前對(duì)應(yīng)的Interceptor的preHandle方法的返回值為true時(shí)才會(huì)執(zhí)行宇葱。
* 該方法將在整個(gè)請(qǐng)求完成之后,也就是DispatcherServlet渲染了視圖執(zhí)行刊头, 這個(gè)方法的主要作用是用于清理資源的黍瞧,
*/
@Override
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}