SpringMVC的拦截器

SpringMVC拦截器-拦截器的作用

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。

自定义拦截器很简单,只有如下三步:
①创建拦截器类实现HandlerInterceptor接口

public class MyInterceptor1 implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(" afterCompletion");}
}
public class MyInterceptor2 implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle2");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle2");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(" afterCompletion2");}
}

②配置拦截器

    <mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.controller.MyInterceptor1"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.controller.MyInterceptor2"/></mvc:interceptor></mvc:interceptors>

③测试拦截器的拦截效果

    @RequestMapping(value = {"/qq2"})public  ModelAndView method2(ModelAndView modelAndView){modelAndView.addObject("name","ccc");modelAndView.setViewName("success");return modelAndView;}

结论:

当拦截器的preHandle方法返回true则会执行目标资源,如果返回false则不执行目标资源

多个拦截器情况下,配置在前的先执行,配置在后的后执行

拦截器中的方法执行顺序是:preHandler-------目标资源----postHandle---- afterCompletion

SpringMVC异常处理机制

异常处理的思路

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。

系统的Dao、Service、Controller出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,

异常处理两种方式

① 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="defaultErrorView" value="error"/><property name="exceptionMappings"><map><entry key="java.lang.NumberFormatException" value="error"/></map></property></bean>
    @RequestMapping(value = {"/qq2"})public  ModelAndView method2(ModelAndView modelAndView) throws Exception{String s="abc";System.out.println(Integer.parseInt(s));modelAndView.addObject("name","ccc");modelAndView.setViewName("success");return modelAndView;}

② 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器

自定义异常处理步骤

①创建异常处理器类实现HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("error");return modelAndView;}
}

②配置异常处理器

    <bean class="com.controller.MyExceptionResolver"/>

③编写异常页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>error</h1>
</body>
</html>

④测试异常跳转

spring—拦截器和异常相关推荐

  1. Spring拦截器实现登录拦截

    hello,大家好,好久没发文章了,之前一段时间因为没遇到太好的内容.昨天研究了下登录时Spring拦截器实现功能,今天和大家分享下,有问题的话欢迎大家指出与批评,好,下面进入正题.    说起拦截器 ...

  2. 「深入源码」Spring拦截器的实现原理和执行机制

    我一直以为Spring的拦截器是基于AOP原理实现的,仔细阅读完源码,才知道自己的认知是错误的. 今天我们就从源码的角度剖析下Spring拦截器. 一.创建一个自己的拦截器 实现一个自己的拦截器,需要 ...

  3. 运用Unity实现AOP拦截器[结合异常记录实例]

    运用Unity实现AOP拦截器[结合异常记录实例] 参考文章: (1)运用Unity实现AOP拦截器[结合异常记录实例] (2)https://www.cnblogs.com/wujy/p/33233 ...

  4. spring拦截器传递传递参数到controller+Aop切面环绕方法传递参数到目标方法

    一.前言 由于业务需要,在网上找了很久得到了这两种方式.本文代码偏少,主要讲解一下怎么传,如何接收,也记录一下,以便之后查看. 二.Spring拦截器传递参数到controller 下面是我拦截器中的 ...

  5. Spring拦截器的切入点定义

    Spring拦截器定义切入点: 1.NameMatchMethodPointcutAdvisor (根据方法名匹配织入)  <bean id="advisor" class= ...

  6. Java(Spring拦截器、过滤器、AOP)

    过滤器: 过滤器是servlet提供的API,需要实现javax.servlet.Filter接口.过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletRe ...

  7. Spring拦截器的实现以及通过注解实现拦截

    五 本篇是本人记录对于Spring的拦截器简单的使用记录,以及通过自定义注解的方式实现其拦截目的 首先看一下简单的实现 第一步:定义一个测试类,用于向后台发送请求 @RestController pu ...

  8. Spring拦截器校验Json格式参数

    Json已经成为一种主流的数据传输格式,请求参数是整个RequestBody. 那么,拦截器中如何获取Json呢? 办法是:通过request.getInputStream. RequestBody是 ...

  9. spring拦截器不生效

    在平时休闲时间做一个学习型项目练手,在练习过程中,遇到一个spring拦截器不生效的问题,拦截器代码如下: @Aspect // 该注解标示该类为切面类 @Component public class ...

最新文章

  1. 贝叶斯机器学习:经典模型与代码实现!
  2. Binary Tree Preorder Traversal LeetCode OJ
  3. 大学物理光学思维导图_思维导图走进新华百货现代物流
  4. linux 控制网卡流量,如何管理和控制多网卡 Linux 虚拟机的流量走向
  5. Idea 添加lib文件夹,并添加至项目Libary
  6. postman使用之四:设置读取变量和切换环境
  7. ros学习-中国大学MOOC---《机器人操作系统入门》课程讲义
  8. 网络安全概论 第四章 电子邮件安全加密(PGP)
  9. Clickhouse时间日期函数一文详解+代码展示
  10. Arduino 控制RFID读写器读写 IC卡
  11. Android 下标圆点数字
  12. 完美国际真数苹果_苹果手机:Checkm8漏洞永久性破解A5-A11设备 全线旧设备实现完美越狱...
  13. java中数据类型的等级_Java 数据类型、变量
  14. 寻呼(Paging)
  15. 简单三行JS代码实现滑动门
  16. (一)路径规划算法---Astar与C++可视化在RVIZ的二维栅格地图
  17. 常见步进电机驱动芯片
  18. pmd格式模型 html加载,Three.js 模型载入
  19. C语言串口编程教程PDF
  20. RPG游戏《黑暗之光》流程介绍与代码分析之(十三):角色攻击系统的实现

热门文章

  1. 关于C++子类父类成员函数的覆盖和隐藏
  2. 从功能层次,阐述CPU、接口和外设之间的交互
  3. 你必须知道的CSS盒模型,顺利通过阿里面试
  4. 程序员必看!Android面试10大知识点总结宝典助你通关!年薪50W
  5. 程序员如何自我学习和成长?深度好文
  6. Android版:验证手机号码的正则表达式 (转)
  7. MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes
  8. 免费LInux主机资源
  9. MonoRail学习-介绍篇(一)
  10. WPF的样式(Style)继承