spring mvc拦截器的执行流程-mile米乐体育

本节我们主要讲解 springmvc 拦截器的执行流程。分两部分介绍,首先介绍单个拦截器执行流程然后介绍多个拦截器的执行流程。

单个拦截器的执行流程

在配置文件中如果只定义了一个拦截器,程序将首先执行拦截器类中的 prehandle 方法,如果该方法返回 true,程序将继续执行控制器中处理请求的方法,否则中断执行。如果 prehandle 方法返回 true,并且控制器中处理请求的方法执行后、返回视图前将执行 posthandle 方法,返回视图后才执行 aftercompletion 方法。 下面通过一个应用 springmvcdemo06 演示拦截器的执行流程,具体步骤如下:

1)创建应用

创建一个名为 springmvcdemo06 的 web 应用,并将 spring mvc 相关的 jar 包复制到 lib 目录中。

2)创建 web.xml

在 web-inf 目录下创建 web.xml 文件,该文件中的配置信息如下:
                     springmvc         org.springframework.web.servlet.dispatcherservlet     1                   springmvc         /      

3)创建控制器类

在 src 目录下创建一个名为 controller 的包,并在该包中创建控制器类 interceptor controller,代码如下:
 package controller;  import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping;  @controller public class interceptorcontroller {     @requestmapping("/gototest")     public string gototest() {         system.out.println("正在测试拦截器,执行控制器的处理请求方法中");         return "test";     } }

4)创建拦截器类

在 src 目录下创建一个名为 interceptor 的包,并在该包中创建拦截器类 testinterceptor,代码与《拦截器的配置和使用》教程中的示例代码相同。

5)创建配置文件 springmvc-servlet.xml

在 web-inf 目录下创建配置文件 springmvc-servlet.xml,代码如下:
                                                                               

6)创建视图 jsp 文件

在 web-inf 目录下创建一个 jsp 文件夹,并在该文件夹中创建一个 jsp 文件 test.jsp,代码如下:
 <%@ page language="java" contenttype="text/html; charset=utf-8"     pageencoding="utf-8"%>     insert title here       视图     <%system.out.println("视图渲染结束。"); %>  

7)测试拦截器

首先将 springmvcdemo06 应用发布到 tomcat 服务器,并启动 tomcat 服务器,然后通过地址“http://localhost:8080/springmvcdemo06/gototest”测试拦截器。程序正确执行后控制台的输出结果如图 1 所示。 图 1单个拦截器的执行过程

多个拦截器的执行流程

在 web 应用中通常需要有多个拦截器同时工作,这时它们的 prehandle 方法将按照配置文件中拦截器的配置顺序执行,而它们的 posthandle 方法和 aftercompletion 方法则按照配置顺序的反序执行。 下面通过修改“单个拦截器的执行流程”小节的 springmvcdemo06 应用来演示多个拦截器的执行流程,具体步骤如下:

1)创建多个拦截器

在 springmvcdemo06 应用的 interceptor 包中创建两个拦截器类 interceptor1 和 interceptor2。
 package interceptor;  import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandview;  public class interceptor1 implements handlerinterceptor {     public boolean prehandle(httpservletrequest request,             httpservletresponse response, object handler) throws exception {         system.out.println("interceptor prehandle 方法执行");         /** 返回true表示继续向下执行,返回false表示中断后续的操作 */         return true;     }      @override     public void posthandle(httpservletrequest request,             httpservletresponse response, object handler,             modelandview modelandview) throws exception {         system.out.println("interceptor1 posthandle 方法执行");     }      @override     public void aftercompletion(httpservletrequest request,             httpservletresponse response, object handler, exception ex)             throws exception {         system.out.println("interceptor1 aftercompletion 方法执行");     } }
interceptor2 类的代码如下:
 package interceptor;  import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandview;  public class interceptor2 implements handlerinterceptor {     public boolean prehandle(httpservletrequest request,             httpservletresponse response, object handler) throws exception {         system.out.println("interceptor2 prehandle 方法执行");         /** 返回true表示继续向下执行,返回false表示中断后续的操作 */         return true;     }      @override     public void posthandle(httpservletrequest request,             httpservletresponse response, object handler,             modelandview modelandview) throws exception {         system.out.println("interceptor2 posthandle 方法执行");     }      @override     public void aftercompletion(httpservletrequest request,             httpservletresponse response, object handler, exception ex)             throws exception {         system.out.println("interceptor2 aftercompletion 方法执行");     } }

2)配置拦截器

在配置文件 springmvc-servlet.xml 中的 元素内配置两个拦截器 interceptor1 和 interceptor2,配置代码如下:
                                                                                                        

3)测试多个拦截器

首先将 springmvcdemo06 应用发布到 tomcat 服务器并启动 tomcat 服务器,然后通过地址“http://localhost:8080/springmvcdemo06/gototest”测试拦截器。程序正确执行后控制台的输出结果如图 2 所示。 图 2多个拦截器的执行过程
展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图