Spring MVC 拦截器---27

Spring MVC 拦截器---27


拦截器:

是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强;

使用场景:解决请求的共性问题,如:乱码问题、权限验证问题等

拦截器和过滤器

①拦截器是基于java的反射机制的,而过滤器是基于函数回调。 ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑

实现SpringMVC拦截器的三个步骤

1:创建一个实现HandlerInterceptor接口,并实现接口的方法的类

public class TestInterceptor implements HandlerInterceptor {

	//请求前,带返回值(true:执行请求后和结束的方法,
	//false:表示执行到请求就拦截下来不再执行请求后的结果)
	//Object handler代表被拦截的目标对象。
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("执行到了preHandle方法!");
		return true;
	}
	//请求后,modelAndView:返回的视图 .setViewName(“/视图.jsp”)
	//ModelAndView对象可以改变发往的视图或修改发往视图的信息。
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("执行到了postHandle方法!");
		modelAndView.setViewName("course_admin/file");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
			System.out.println("执行到了afterCompletion方法!");
	}
}


2:将创建的拦截器注册到SpringMVC的配置文件中实现注册

3:配置拦截器的拦截规则:

	<!-- 注册拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="//courses"/>
				<bean class="com.imooc.mvcdemo.controller.TestInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

=================================================================================

拦截器的方法介绍

1:preHandle:请求前,带返回值(true:执行请求后和结束的方法,false:表示执行到请求就拦截下来不再执行请求后的结果
	Object arg代表被拦截的目标对象。)
2:postHandle:请求后,modelAndView:返回的视图 .setViewName(“/视图.jsp”)
	postHandle()方法的ModelAndView对象可以改变发往的视图修改发往视图的信息
3:afterCompletion()方法表示视图显示之后在执行该方法。(一般用于资源的销毁)

多个拦截器协同时工作流程图


拦截器的其它实现方式:

(1)拦截器的类还可以通过实现WebRequestInterceptor(HandlerInterceptor)接口来编写<br> (2)向SpringMVC框架注册的写法不变<br> (3)弊端:preHandler方法没有返回值,不能终止请求 Ps:建议使用功能更强大的实现方式,实现HandlerInterceptor接口。












































 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值