Spring-MVC中的拦截器

本文详细介绍了Spring MVC框架中的拦截器概念及其工作原理。包括如何创建拦截器、实现HandlerInterceptor接口,并通过配置文件注册拦截器。此外,还解释了拦截器中的三个主要方法:preHandle、postHandle及afterCompletion的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring-MVC中的拦截器

拦截器

(1)什么是拦截器?

DispatcherServlet收到请求之后,如果有拦截器,
会先调用拦截器,然后再调用处理器(Controller)。
注:
    a.过滤器属于Servlet规范,而拦截器属于
    Spring框架。
    b.过滤器用于拦截Servlet容器的调用过程;
    而拦截器由拦截DispatcherServlet的调用过程。

(2)如何写拦截器?

step1.写一个java类,实现HandlerInterceptor
    接口。
step2.在接口方法当中,实现拦截处理逻辑。
step3.配置拦截器。(在Spring配置文件当中配置)。

(2)如何写拦截器?

step1.写一个java类,实现HandlerInterceptor
    接口。
step2.在接口方法当中,实现拦截处理逻辑。
step3.配置拦截器。(在Spring配置文件当中配置)。

package interceptors;
/*
 * 拦截器可以更改要发送出去的 ModelAndView 的内容,
 */
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class SomeInterceptor implements HandlerInterceptor {
	
/**
 * 这个方法在处理器执行之前执行,如果返回值为false,就不允许向后调用了
 * 当DispatcherServlet收到请求之后,会先调用preHandle方法(首先被调用)
 * 如果这个方法的返回值是true,会继续向后调用(向后调用其他拦截器或者处理器)
 * 如果这个方法的反回值是false,则表示中断请求,返回结果(即不再向后调用了)
 * handler 这个对象是处理器方法对象(可以利用java反射来获得处理器的方法特征
 */
	public boolean preHandle(
			HttpServletRequest request, 
			HttpServletResponse response, 
			Object handler)  //handler这个对象是处理器方法对象(可以利用java反射来获得处理器的方法特征)
			throws Exception {
		
System.out.println("preHandle方法在最开始执行,如果true就执行下面的");

		return true;
	}

	/**
	 * post:在--之后, handle :处理
	 * 当处理器方法已经执行完毕,正准备将处理结果返回DispatcherServlet(前端控制器)之前,会执行postHandle方法
	 * 注:
	 * 	这里的modelAndView可以在该方法里面,修改处理结果。
	 */
	public void postHandle(
			HttpServletRequest request, 
			HttpServletResponse response, 
			Object handler,
			ModelAndView modelAndView) 
					throws Exception {
System.out.println("postHandle()方法在最后之前执行!");
	}
	
/**
 * 最后执行的方法
 * Exception ex 是处理器方法所抛出的异常
 * 可以这个反法里面处理处理器所抛出的异常
 */
	public void afterCompletion(
			HttpServletRequest request, 
			HttpServletResponse response, 
			Object handler, Exception ex)
			throws Exception {
System.out.println("afterCompletion()方法最后执行");

	}

	
	/*
	 * <!-- 在Sring—mvc中配置拦截器 ,当有多个拦截器,会按先后顺序依次执行-->
	<!-- 这里有一点小坑要记住!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		注:
			当请求路径有多个/,应该使用/**来拦截
	 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"/>		<!-- /*并不是拦截所有,/**就是拦截所有了,没有/*** -->
			<bean class="interceptors.SomeInterceptor"/>
		</mvc:interceptor>
	</mvc:interceptors>
	 */
}


运行结果:


preHandle方法在最开始执行,如果true就执行下面的
hello2的方法(前端控制器)
postHandle()方法在最后之前执行!
afterCompletion()方法最后执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值