spring—拦截器和异常
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—拦截器和异常相关推荐
- Spring拦截器实现登录拦截
hello,大家好,好久没发文章了,之前一段时间因为没遇到太好的内容.昨天研究了下登录时Spring拦截器实现功能,今天和大家分享下,有问题的话欢迎大家指出与批评,好,下面进入正题. 说起拦截器 ...
- 「深入源码」Spring拦截器的实现原理和执行机制
我一直以为Spring的拦截器是基于AOP原理实现的,仔细阅读完源码,才知道自己的认知是错误的. 今天我们就从源码的角度剖析下Spring拦截器. 一.创建一个自己的拦截器 实现一个自己的拦截器,需要 ...
- 运用Unity实现AOP拦截器[结合异常记录实例]
运用Unity实现AOP拦截器[结合异常记录实例] 参考文章: (1)运用Unity实现AOP拦截器[结合异常记录实例] (2)https://www.cnblogs.com/wujy/p/33233 ...
- spring拦截器传递传递参数到controller+Aop切面环绕方法传递参数到目标方法
一.前言 由于业务需要,在网上找了很久得到了这两种方式.本文代码偏少,主要讲解一下怎么传,如何接收,也记录一下,以便之后查看. 二.Spring拦截器传递参数到controller 下面是我拦截器中的 ...
- Spring拦截器的切入点定义
Spring拦截器定义切入点: 1.NameMatchMethodPointcutAdvisor (根据方法名匹配织入) <bean id="advisor" class= ...
- Java(Spring拦截器、过滤器、AOP)
过滤器: 过滤器是servlet提供的API,需要实现javax.servlet.Filter接口.过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletRe ...
- Spring拦截器的实现以及通过注解实现拦截
五 本篇是本人记录对于Spring的拦截器简单的使用记录,以及通过自定义注解的方式实现其拦截目的 首先看一下简单的实现 第一步:定义一个测试类,用于向后台发送请求 @RestController pu ...
- Spring拦截器校验Json格式参数
Json已经成为一种主流的数据传输格式,请求参数是整个RequestBody. 那么,拦截器中如何获取Json呢? 办法是:通过request.getInputStream. RequestBody是 ...
- spring拦截器不生效
在平时休闲时间做一个学习型项目练手,在练习过程中,遇到一个spring拦截器不生效的问题,拦截器代码如下: @Aspect // 该注解标示该类为切面类 @Component public class ...
最新文章
- 贝叶斯机器学习:经典模型与代码实现!
- Binary Tree Preorder Traversal LeetCode OJ
- 大学物理光学思维导图_思维导图走进新华百货现代物流
- linux 控制网卡流量,如何管理和控制多网卡 Linux 虚拟机的流量走向
- Idea 添加lib文件夹,并添加至项目Libary
- postman使用之四:设置读取变量和切换环境
- ros学习-中国大学MOOC---《机器人操作系统入门》课程讲义
- 网络安全概论 第四章 电子邮件安全加密(PGP)
- Clickhouse时间日期函数一文详解+代码展示
- Arduino 控制RFID读写器读写 IC卡
- Android 下标圆点数字
- 完美国际真数苹果_苹果手机:Checkm8漏洞永久性破解A5-A11设备 全线旧设备实现完美越狱...
- java中数据类型的等级_Java 数据类型、变量
- 寻呼(Paging)
- 简单三行JS代码实现滑动门
- (一)路径规划算法---Astar与C++可视化在RVIZ的二维栅格地图
- 常见步进电机驱动芯片
- pmd格式模型 html加载,Three.js 模型载入
- C语言串口编程教程PDF
- RPG游戏《黑暗之光》流程介绍与代码分析之(十三):角色攻击系统的实现
热门文章
- 关于C++子类父类成员函数的覆盖和隐藏
- 从功能层次,阐述CPU、接口和外设之间的交互
- 你必须知道的CSS盒模型,顺利通过阿里面试
- 程序员必看!Android面试10大知识点总结宝典助你通关!年薪50W
- 程序员如何自我学习和成长?深度好文
- Android版:验证手机号码的正则表达式 (转)
- MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes
- 免费LInux主机资源
- MonoRail学习-介绍篇(一)
- WPF的样式(Style)继承