欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC拦截器

程序员文章站 2022-06-13 20:54:17
...

一、开发步骤:

① 引入JAR文件

SpringMVC拦截器

SpringMVC拦截器


 ②定义拦截器类,实现HandlerInterceptor该接口,重写方法

注:preHandle()返回值是false

public class FirstInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("MyInterceptor.preHandle()");
        return false;
    }

    @Override
    public void postHandle(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor.postHandl()");
    }

    @Override
    public void afterCompletion(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("MyInterceptor.afterCompletion()");
    }

 下面对代码中的三个方法进行解释。

preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。

postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回请求前被调用,在该方法中对用户请求request进行处理。

afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。


 ③ 定义控制器方法

@Controller
public class MyController {

    @RequestMapping("/first.do")
    public String doFirst(){

        return "/index.jsp";
    }

④Web.xml:

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
</servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

 


 

⑤ 配置applicationContext.xml,自定义拦截器  

 SpringMVC拦截器

控制台输出如下:

SpringMVC拦截器


注:preHandle()返回值是true. 接到请求后,根据返回值类型判定,为true则执行第一个方法,
随后执行处理器方法。最后经过一系列执行返回客户端响应

SpringMVC拦截器

SpringMVC拦截器

SpringMVC拦截器

 


 ⑥定义多个拦截器

SpringMVC拦截器

SpringMVC拦截器

注:在两个类的preHandler方法返回值为true的情况下:

SpringMVC拦截器

执行流程如下:

SpringMVC拦截器


注:当第一个拦截器类方法为true,第二个为false时,执行效果如下:

第一道为true,则继续执行,会执行到第二个拦截器的preHandler()。在这时,返回值是false,则不继续走控制器方法,

反之,不经过postHandler(),但会响应afterCompletion()。

SpringMVC拦截器


注:若两个拦截器方法返回值都为false。

则只会执行第一个拦截器的方法。后续则都不执行

SpringMVC拦截器