概述
1.拦截器的三个方法:
preHandle():在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true)
postHandle():在控制器方法执行之后执行
afterCompletion():在控制器方法执行之后,且渲染视图完毕后执行
2.多个拦截器的执行顺序 和在SpringMVC的配置文件中配置的顺序有关
preHandle()按照配置的顺序执行,而postHandle()和afterCompletion()按照配置的反序执行
3.若拦截器中有某个拦截器的preHandle()返回了false
拦截器的preHandle()返回false和它之前的拦截器的preHandle()都会执行
所有的拦截器的postHandle()都不执行
拦截器的preHandle()返回false之前的拦截器的afterCompletion()会执行
以下是具体的配置:
需要注意的是SpringMVC中的拦截器需要实现HandlerInterceptor,SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包 -->
<context:component-scan base-package="com.qcw"/>
<!-- 配置Thymeleaf视图解析器 -->
<bean id="viewResolver"
class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean
class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/templates/"/>
<!-- 视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8" />
</bean>
</property>
</bean>
</property>
</bean>
<!--
配置默认的servlet处理静态资源
-当前工程的web.xml配置的前端控制器DispatcherServlet的url-pattern是/
tomcat的web.xml配置的默认的DefaultServlet的url-pattern也是/
此时,浏览器发送的请求会优先被DispatcherServlet进行处理,但是DispatcherServlet无法处理静态资源
若配置了<mvc:default-servlet-handler/>标签,此时浏览器的所有请求都会被DefaultServlet处理
若配置了<mvc:default-servlet-handler/>和<mvc:annotation-driven/>
浏览器发送的请求会先被DispatcherServlet处理,若无法处理再交给DefaultServlet处理
-->
<mvc:default-servlet-handler/>
<!--开启mvc的注解驱动-->
<mvc:annotation-driven/>
<!--配置视图控制器-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<!--配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
<mvc:interceptors>
<!--
bean和ref标签所配置的拦截器默认对DispatcherServlet处理的所有请求进行拦截
mvc:interceptor配置更加的精确
-->
<!--<bean class="com.qcw.interceptor.FirstInterceptor"/>-->
<ref bean="firstInterceptor"></ref>
<ref bean="secondInterceptor"></ref>
<!--<mvc:interceptor>-->
<!-- <!–配置需要拦截的请求得请求路径(这里比较特殊),/**表示所有得请求,而/*只表示一层目录的–>-->
<!-- <mvc:mapping path="/**"/>-->
<!-- <!–配置需要排除拦截的请求的请求路径–>-->
<!-- <mvc:exclude-mapping path="/abc"/>-->
<!-- <!–配置拦截器–>-->
<!-- <ref bean="firstInterceptor"></ref>-->
<!--</mvc:interceptor>-->
</mvc:interceptors>
</beans>
package com.qcw.interceptor;
/**
* @author wqc
* @date 2022/10/3 15:02
* Description:
* 拦截器的三个方法:
* preHandle():在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true)
* postHandle():在控制器方法执行之后执行
* afterCompletion():在控制器方法执行之后,且渲染视图完毕后执行
*
* 多个拦截器的执行顺序 和在SpringMVC的配置文件中配置的顺序有关
* preHandle()按照配置的顺序执行,而postHandle()和afterCompletion()按照配置的反序执行
*
* 若拦截器中有某个拦截器的preHandle()返回了false
* 拦截器的preHandle()返回false和它之前的拦截器的preHandle()都会执行
* 所有的拦截器的postHandle()都不执行
* 拦截器的preHandle()返回false之前的拦截器的afterCompletion()会执行
*/
@Component
public class FirstInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("FirstInterceptor-->preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("FirstInterceptor-->postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("FirstInterceptor-->afterCompletion");
}
}
package com.qcw.interceptor;
/**
* @author wqc
* @date 2022/10/3 18:45
* Description:
*/
@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拦截器的配置及其细节的全部内容,希望文章能够帮你解决SpringMVC拦截器的配置及其细节所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复