前言
攔截器
一、攔截器的配置
SpringMVC中的攔截器用于攔截控制器方法的執(zhí)行
SpringMVC中的攔截器需要實現(xiàn)HandlerInterceptor
SpringMVC的攔截器必須在SpringMVC的配置文件中進行配置:
<mvc:interceptors>
<!-- <bean class="com.dragon.mvc.interceptors.FirstInterceptors"></bean>-->
<!-- <ref bean="firstInterceptor"></ref>-->
<!-- 以上兩種配置方式都是對DispatcherServlet所處理的所有的請求進行攔截 -->
<!-- <mvc:interceptor>-->
<!-- <mvc:mapping path="/**"/>-->
<!-- <mvc:exclude-mapping path="/testRequestEntity"/>-->
<!-- <ref bean="firstInterceptors"></ref>-->
<!-- </mvc:interceptor>-->
<ref bean="firstInterceptor"></ref>
<ref bean="secondInterceptor"></ref>
</mvc:interceptors>
<!--
以上配置方式可以通過ref或bean標簽設(shè)置攔截器,通過mvc:mapping設(shè)置需要攔截的請求,通過
mvc:exclude-mapping設(shè)置需要排除的請求,即不需要攔截的請求
-->
FirstIntercepor類:
package com.dragon.mvc.interceptors;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class FirstInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("FirstInterceptors----->preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("FirstInterceptors----->postHandle");;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("FirstInterceptors----->afterCompletion");
}
}
SecondInterceptor類:
package com.dragon.mvc.interceptors;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class SecondInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("SecondInterceptor----->preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("SecondInterceptor----->postHandle");;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("SecondInterceptor----->afterCompletion");
}
}
二、攔截器的三個抽象方法
SpringMVC中的攔截器有三個抽象方法:
preHandle:控制器方法執(zhí)行之前執(zhí)行preHandle(),其boolean類型的返回值表示是否攔截或放行,返回true為放行,即調(diào)用控制器方法;返回false表示攔截,即不調(diào)用控制器方法。
postHandle:控制器方法執(zhí)行之后執(zhí)行postHandle()
afterComplation:處理完視圖和模型數(shù)據(jù),渲染視圖完畢之后執(zhí)行afterComplation()。文章來源:http://www.zghlxwxcb.cn/news/detail-690157.html
三、多個攔截器的執(zhí)行順序
- 若每個攔截器的preHandle()都返回true此時多個攔截器的執(zhí)行順序和攔截器在SpringMVC的配置文件的配置順序有關(guān):preHandle()會按照配置的順序執(zhí)行,而postHandle()和afterComplation()會按照配置的反序執(zhí)行
- 若某個攔截器的preHandle()返回了false
preHandle()返回false和它之前的攔截器的preHandle()都會執(zhí)行,postHandle()都不執(zhí)行,返回false的攔截器之前的攔截器的afterComplation()會執(zhí)行。在上面的代碼中FirstInterceptor和SecondInterceptor配置的順序,運行的結(jié)果如下:
如果把上訴攔截器的類中preHandle方法其中一個返回false呢,大家可以看一下效果。
大家可以看一下源碼繼續(xù)深入了解一下就明白了。
總結(jié)
以上就是攔截器的講述。文章來源地址http://www.zghlxwxcb.cn/news/detail-690157.html
到了這里,關(guān)于springMVC之?dāng)r截器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!