SpringMVC异常处理机制

2.1 异常描述

在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 ​ 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍使用Spring MVC统一处理异常的解决和实现过程。

3.2 异常处理三种方式

(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;

(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义异常处理器;

(3)使用@ExceptionHandler注解实现异常处理;

3.3 方式一:简单异常处理器SimpleMappingExceptionResolver(了解)

SpringMVC已经定义好了该类型转换器,在使用时可以根据项目情况进行相应异常与视图的映射配置

<!--配置简单映射异常处理器--><bean class=“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”>    <property name=“defaultErrorView” value=“error”/>   默认错误视图<property name=“exceptionMappings”><map>		<entry key="com.itheima.exception.MyException" value="error"/><entry key="java.lang.ClassCastException" value="error"/></map></property>
</bean>

3.4 方式二:自定义异常处理步骤(掌握)

案例3:自定义异常

需求:发送请求,在方法中出现异常了,利用自定义的异常来处理异常!把异常信息显示在自定义的错误页面。

步骤1:自定义异常类

作用:用来封装自己编写的异常信息!

/*** 自定义异常类*/
public class SysException extends Exception{// 存储提示信息的private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public SysException(String message) {this.message = message;}}
步骤2:自定义异常处理类
/*** 异常处理器*/
public class SysExceptionResolver implements HandlerExceptionResolver{/*** 处理异常业务逻辑* @param request* @param response* @param handler* @param ex* @return*/public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 获取到异常对象SysException e = null;if(ex instanceof SysException){e = (SysException)ex;}else{e = new SysException("系统正在维护....");}// 创建ModelAndView对象ModelAndView mv = new ModelAndView();mv.addObject("errorMsg",e.getMessage());mv.setViewName("error");return mv;}
}
步骤3:index页面发送一个请求      
<h3>异常处理</h3>
<a href="user/testException" >异常处理</a>
步骤4:页面控制器接收请求

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/testException")public String testException() throws SysException{System.out.println("testException执行了...");try {// 模拟异常int a = 10/0;} catch (Exception e) {// 打印异常信息e.printStackTrace();// 抛出自定义异常信息throw new SysException("查询所有用户出现错误了...");}return "success";}
}
步骤5:springMVC配置文件

配置一个异常处理类即可

<!--配置异常处理器-->
<bean id="sysExceptionResolver" class="com.baijie.exception.SysExceptionResolver"/>
步骤6:创建error页面,存放异常信息
<h3>异常错误信息显示类</h3>    
${errorMsg}

3、项目中配置全局错误页面

项目中难免会出现404,500等这种请求错误信息,我们应当一旦出现异常的时候应该把错误响应到一个错误页面,而不是直接把错误信息直接凉给浏览器显示!

步骤1:创建一个异常错误页面xxx.jsp

步骤2:web.xml配置

步骤3:结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277456.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Sqlite中通过Replace来实现插入和更新

你可能在批量处理一个事务的时候&#xff0c;想要批量插入一系列的数据&#xff0c;但是这些数据当添加完一次之后&#xff0c;重新添加的时候&#xff0c;你不想要重新添加&#xff0c;只是想将原有的数据进行更新&#xff0c;例如&#xff1a;我想要通过Excel将一系列的图书导…

Peter算法小课堂—简单建模(3)

国王的奖赏系列 国王的奖赏1 题目描述&#xff1a; 你作为战斗英雄得到国王的奖赏&#xff0c;可以在地图上选一块土地。地图里共n*m格土地&#xff0c;第x行第y列的土地格子里标记着d[x][y]的整数价值&#xff0c;可能出现负数。国王让你选择若干列土地&#xff0c;只要是连…

springcloudalibaba01

整合springcloud 和 springcloudalibaba&#xff0c;&#xff0c;&#xff0c; 版本对应关系 <dependencyManagement><dependencies><!--每个springcloud的工具都有一个版本每个springcloud alibaba的工具都有一个版本统一版本--> <!-- 整合…

【lesson15】进程控制之进程等待(2)

文章目录 进程等待阻塞式等待非阻塞式等待非阻塞式等待 vs 阻塞式等待 进程等待 上次我们讲了许多关于进程等待的必要性和重要性还有其函数的使用方法&#xff0c;这次我们主要介绍函数细节方面的问题。 阻塞式等待 代码演示进程阻塞式等待 代码&#xff1a; #include <…

STL中sort的底层实现

文章目录 1、源码分析2、算法优化3、总结 在讲解STL中sort的底层原理之前&#xff0c;先引申出这样几个问题&#xff1f; ①STL中sort的底层是采用哪种或者哪几种排序&#xff1f; ②STL中sort会导致栈溢出吗&#xff1f; ③快速排序的时间复杂度是不稳定的 l o g 2 n log_2n l…

力扣22. 括号生成(java 回溯法)

Problem: 22. 括号生成 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 我们首先要知道&#xff0c;若想生成正确的括号我们需要让右括号去适配左括号&#xff0c;在此基础上我们利用回溯去解决此题目 1.题目给定n个括号&#xff0c;即当回溯决策路径长度等于 2 n 2n…

vue3 + ts 防抖指令,节流指令,复制指令

vue3 ts 自定义指令 防抖指令&#xff0c;节流指令&#xff0c;复制指令 本文使用了 element-ui , element-plus 官网 源文件 https://admin.spicyboy.cn/#/directives/debounceDirect 新建 copy.ts 文件 &#xff08;复制指令&#xff09; import type { Directive, Di…

深入分析ClassLocader工作机制

文章目录 一、ClassLoader简介1. 概念2. ClassLoader类结构分析 二、ClassLoader的双亲委派机制三、Class文件的加载流程1. 简介2. 加载字节码到内存3. 验证与解析4. 初始化Class对象 四、常见加载类错误分析1. ClassNotFoundException2. NoClassDefFoundError3. UnsatisfiledL…

系统的安全性设计

要设计一个安全的系统&#xff0c;除了要了解一些前面讲到的常用的保护手段和技术措施外&#xff0c;还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识&#xff0c;这样才能对系统的安全作有针对性的设计和强化&#xff0c;即“知己知彼&#xff0c;百战百胜”。 下…

NO-IOT翻频,什么是翻频,电信为什么翻频

1.1 翻频迁移最终的目的就是减少网络的相互干扰&#xff0c;提供使用质量. 1.2 随着与日俱增的网络规模的扩大&#xff0c;网内干扰已成了影响网络的质量标准之一&#xff0c;为了保障电信上网体验&#xff0c;满足用户日益增长的网速需求,更好的服务客户&#xff0c;电信针对…

在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)

背景 在项目过程中&#xff0c;有时候你需要调用非C#编写的DLL文件&#xff0c;尤其在使用一些第三方通讯组件的时候&#xff0c;通过C#来开发应用软件时&#xff0c;就需要利用DllImport特性进行方法调用。本篇文章将引导你快速理解这个调用的过程。 步骤 1. 创建一个CSharp…

JMeter下载与安装

文章目录 前言一、安装java环境&#xff08;JDK下载与安装&#xff09;二、JMeter下载三、JMeter安装1.解压缩2.配置环境变量 四、JMeter启动&#xff08;启动成功则代表JMeter安装成功&#xff09;五、JMeter汉化&#xff08;将JMeter修改成中文&#xff09;1.方法一&#xff…