SpringMVC:详述拦截器

摘要:
postHandle方法(在HandlerMethod方法执行后,渲染视图前调用。

将堆内存SpringMVC使用拦截器对请求进行拦截处理,以实现特定的功能:

具体实现:

1、自定义一个实现HandlerInterceptor接口的类并实现接口中定义的抽象方法(实现了三个方法,分别处理Handler Method方法执行前、执行后以及渲染视图后的操作)

packagecom.zzj.interceptor;

importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.springframework.web.servlet.HandlerInterceptor;
importorg.springframework.web.servlet.ModelAndView;

public class MyInterceptor implementsHandlerInterceptor{

    @Override
    public booleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throwsException {
//该方法在Handler Method之前被调用
//作用:常用于实现权限
System.out.println("preHandle");
        return false;
    }

    @Override
    public voidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throwsException {
//该方法在Handler Method之后,渲染视图之前
//
常用于对请求域中的属性或视图做出修改
System.out.println("postHandle");
        
    }

    @Override
    public voidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throwsException {
//该方法在渲染视图之后被调用

      //作用:常用于释放资源

System.out.println("afterCompletion");
    }
    
}

2、 配置拦截器

a、所有请求

<mvc:interceptors>
    <bean class="com.zzj.interceptor.MyInterceptor"></bean>
</mvc:interceptors>

b、特定请求

<mvc:interceptors>
    <mvc:interceptor>

      <!--

mvc:exclude-mapping用于设置不拦截哪些路径的请求;mvc:mapping用于设置拦截哪些路径的请求,如下例子:

/userinfo只拦截/userinfo请求,不拦截/userinfo/toView.do请求

/userinfo/*拦截/userinfo/xxx请求

-->

        <mvc:mapping path="/userinfo/*"/>
        <bean class="com.zzj.interceptor.MyInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

拦截器的执行过程分析:

我们在发送一个请求后必定会执行DispatchServlet中的doDispatch方法,而在执行如下方法的顺序我们来分析一下:

preHandle方法(在Handler Method方法执行前调用。功能举例:校验、实现权限等)

SpringMVC:详述拦截器第1张

通过标蓝代码我们可以看到preHandle在Handler Method之前执行,

mappedHandler.applyPreHandle(processedRequest, response)执行的也就是我们创建的拦截器里的preHandler方法,

我们可以在该方法里通过返回boolean的值来决定是打回请求(拒绝访问),还是继续执行之后的步骤。

postHandle方法(在Handler Method方法执行后,渲染视图前调用。功能举例:加签名,印章等)

SpringMVC:详述拦截器第2张

标蓝部分即postHandlle的执行,可见他在Handler Method之后执行,而在processDispatchResult(该方法里将会进行视图渲染,详见下方法图)之前执行

afterCompletion方法在渲染视图之后被调用。功能举例:释放资源

SpringMVC:详述拦截器第3张

由上方法介绍可知,之后会执行processDispatchResult方法,我们找到该方法,可见render方法,该方法我们在自定义视图的博客中介绍过,是用来进行渲染视图的

在渲染视图后,才会执行afterCompletion方法

免责声明:文章转载自《SpringMVC:详述拦截器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 两个textBox控件调用同一个monthCalendar输入日期ORACLE 体系结构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring MVC 文件上传与下载快速学习

1、文件上传下载的原理   Web 中文件上传下载是和 HTTP 协议分不开的,想要更加深入的理解文件上传和下载,必须要对 HTTP 协议有充分认识。 文件上传   在 TCP/IP 中,最早出现的文件上传机制是 FTP,这是将文件由客户端发送到服务器的标准机制。而在 Web 开发中,使用应用层协议 HTTP,通过在请求头中设置传输的内容类型 Conten...

异常(2) --- 编译器对于SEH异常的拓展

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 异常(2) --- 编译器对于SEH异常的拓展 在 异常(1)中,我们介绍了用户模拟异常与CPU异常的收集,以及内核层与用户层异常的处理,其中介绍过SEH异常。 我们之前只提到过编译器拓展SEH异常的,但是由于篇幅有限,并没...

Servlet3.0与springmvc那些事

 官方文档:https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.html#mvc-servlet-context-hierarchy 以前开发web工程:servlet、filter、listener都需要在web.xml进行注册,包括springm...

5个Android开发中比较常见的内存泄漏问题及解决办法

在Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要再使用了,本该被回收时,而另外一个正在使用的对象持有它的引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了。 内存...

Android Handler 避免内存泄漏的用法总结

Android开发经常会用到handler,但是我们发现每次使用Handler都会出现:This Handler class should be static or leaks might occur(null)这样的提示。Android lint就是为了提示我们,这样使用Handler会容易造成内存泄漏。但是你会发现其实改成static并没有什么用。因为...

js原生封装自定义滚动条

1 /* 2 * @Author: dothin前端 3 * @Date: 2015-11-21 00:12:15 4 * @Last Modified by: dothin前端 5 * @Last Modified time: 2015-11-21 00:29:12 6 */ 7 ! function()...