springMVC如何自定义拦截器

这篇文章主要介绍“springMVC如何自定义拦截器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springMVC如何自定义拦截器”文章能帮助大家解决问题。

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站设计、成都网站设计、萧县网络推广、微信平台小程序开发、萧县网络营销、萧县企业策划、萧县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供萧县建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

一、概述

springMVC也可以使用拦截器对请求拦截处理,用户可以自定义拦截器来实现特定的功能,自定义拦截器必须实现HanderInterceptor接口;

HanderInterceptor接口方法有:preHandle、postHandle、afterCompletion;

preHandle:

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

postHandle:

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

afterCompletion:

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

二、拦截器配置和实例验证

目录结构:

springMVC如何自定义拦截器

1.配置:

web.xml配置:只配置了DispatcherServlet


 2 
 6     
 7         springDispatcherServlet
 8         org.springframework.web.servlet.DispatcherServlet
 9         
10         
12         
13             contextConfigLocation
14             classpath:spring.xml
15         
16         
17         1
18     
19 
20     
21     
22         springDispatcherServlet
23         /
24     
25 

spring.xml配置:基础配置+拦截器配置;

基础配置包括:包扫描的配置、视图解析器配置、<mvc:annotation-driven>mvc:annotation-driven>;

拦截器配置:


        
        
    

完整文件:


 2 
 9 
10     
11     
12     
14         
15         
16     
17         
18     
19     
20     
21         
22         
23     
24     
25 

2.拦截器FirstInterceptor.java:

必须实现HanderInterceptor接口

1 package interceptors;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.web.servlet.HandlerInterceptor;
 7 import org.springframework.web.servlet.ModelAndView;
 8 
 9 /**
10  * 拦截器
11  * 多个拦截器的情况:preHandle 顺序执行;postHandle倒叙执行;afterCompletion倒叙执行 12  *  13  * @author lixiuming 14  * 15  */ 16 public class FirstInterceptor implements HandlerInterceptor { 17     /** 18      * 该方法在目标方法之前被调用
19      * 若返回值为true,则继续调用后续的拦截器和目标方法
20      * 若返回值为false,则不会再执行后续的拦截器和目标方法;
21      * 使用场景可以考虑做权限,日志、事务等 22      */ 23     @Override 24     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 25             throws Exception { 26         System.out.println("preHandle"); 27         // TODO Auto-generated method stub 28         return HandlerInterceptor.super.preHandle(request, response, handler); 29     } 30  31     /** 32      * 调用目标方法之后,但渲染视图之前被调用;使用场景 可以对请求域中的属性或者视图做出修改 33      */ 34     @Override 35     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 36             ModelAndView modelAndView) throws Exception { 37         System.out.println("postHandle"); 38         // TODO Auto-generated method stub 39         HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); 40     } 41  42     /** 43      * 渲染视图之后被调用; 使用场景:释放资源 44      */ 45     @Override 46     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) 47             throws Exception { 48         System.out.println("afterCompletion"); 49         // TODO Auto-generated method stub 50         HandlerInterceptor.super.afterCompletion(request, response, handler, ex); 51     } 52  53

3.EmployeeController.java

1 package handler;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 
 6 @RequestMapping("/emp")
 7 @Controller
 8 public class EmployeeController {
 9 
10     @RequestMapping("/testInteceptors")
11     public String testFileUpload() {
12         System.out.println("testInteceptors");
13         return "success";
14     }
15

4.success.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 
 4 
 5 
 6 
 7 Insert title here
 8 
 9 
10 success
11 
12 

5.运行结果&流程:

访问http://localhost:8080/DataOperate/emp/testInteceptors时,页面跳转到success页面;且控制台台打印了:

preHandle

testInteceptors

postHandle

afterCompletion

三、多个拦截器:

spring.xml配置特定路径的拦截器:

这里的路径是访问路径是/emp/testIndex,也就是说,访问/emp/testIndex时,调用第二个拦截器;


2         
3         
4         
5         
6             
7             
8         
9     

拦截器:SecondInterceptor.java:

1 package interceptors;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.web.servlet.HandlerInterceptor;
 7 import org.springframework.web.servlet.ModelAndView;
 8 
 9 /**
10  * 拦截器
11  * 
12  * @author lixiuming
13  *
14  */
15 public class SecondInterceptor implements HandlerInterceptor {
16     /**
17      * 该方法在目标方法之前被调用
18      * 若返回值为true,则继续调用后续的拦截器和目标方法
19      * 若返回值为false,则不会再执行后续的拦截器和目标方法;
20      * 使用场景可以考虑做权限,日志、事务等 21      */ 22     @Override 23     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 24             throws Exception { 25         System.out.println("SecondInterceptor preHandle"); 26         // TODO Auto-generated method stub 27         return HandlerInterceptor.super.preHandle(request, response, handler); 28     } 29  30     /** 31      * 调用目标方法之后,但渲染视图之前被调用;使用场景 可以对请求域中的属性或者视图做出修改 32      */ 33     @Override 34     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 35             ModelAndView modelAndView) throws Exception { 36         System.out.println(" SecondInterceptor postHandle"); 37         // TODO Auto-generated method stub 38         HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); 39     } 40  41     /** 42      * 渲染视图之后被调用; 使用场景:释放资源 43      */ 44     @Override 45     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) 46             throws Exception { 47         System.out.println(" SecondInterceptor afterCompletion"); 48         // TODO Auto-generated method stub 49         HandlerInterceptor.super.afterCompletion(request, response, handler, ex); 50     } 51  52

EmployeeController.java添加方法:

1 package handler;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 
 6 @RequestMapping("/emp")
 7 @Controller
 8 public class EmployeeController {
 9 
10     @RequestMapping("/testInteceptors")
11     public String testFileUpload() {
12         System.out.println("testInteceptors");
13         return "success";
14     }
15 
16     @RequestMapping("/testIndex")
17     public String testIndex() {
18         System.out.println("testInteceptors");
19         return "forward:/index.jsp";
20     }
21

index.jsp:

1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@page import="java.util.*"%>
 4 
 5 
 6 
 7 
 8 Insert title here
 9 
10 
11 

welcom to lean interceptor !

12      13      14  15 

运行结果:

访问:http://localhost:8080/DataOperate/emp/testInteceptors时,页面跳转到success页面;且控制台台打印了:

preHandle

testInteceptors

postHandle

afterCompletion

访问:http://localhost:8080/DataOperate/emp/testIndex时,页面跳转到index.jsp页面;且控制台台打印了:

preHandle

SecondInterceptor preHandle

testInteceptors

 SecondInterceptor postHandle

postHandle

 SecondInterceptor afterCompletion

afterCompletion

 多个拦截器运行流程:多个拦截器的情况:preHandle 顺序执行;postHandle倒叙执行;afterCompletion倒叙执行

springMVC如何自定义拦截器

关于“springMVC如何自定义拦截器”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。


分享名称:springMVC如何自定义拦截器
地址分享:http://scyanting.com/article/jcsgph.html