Spring MVC的高级功能——异常处理(一)简单异常处理器
一、HandlerExceptionResolver接口
如果希望对Spring MVC中所有异常进行统一处理,可以使用Spring MVC提供的异常处理器HandlerExceptionResolver接口。Spring MVC内部提供了HandlerExceptionResolver的实现类SimpleMappingExceptionResolver。它实现了简单的异常处理,通过该实现类可以将不同类型的异常映射到不同的页面,当发生异常的时候,实现类根据发生的异常类型跳转到指定的页面处理异常信息。实现类也可以为所有的异常指定一个默认的异常处理页面,当应用程序抛出的异常没有对应的映射页面,则使用默认页面处理异常信息。
下面通过一个案例演示SimpleMappingExceptionResolver对异常的统一处理,案例具体实现步骤如下所示。
1、在IDEA中创建一个名称为chapter13的Maven Web项目,并在项目chapter13中搭建好Spring MVC运行所需的环境。
2、创建ExceptionController类,ExceptionController类的具体代码如下所示。
@Controller
public class ExceptionController {//抛出空指针异常@RequestMapping("showNullPointer")public void showNullPointer() {ArrayList<Object> list = new ArrayList<>();System.out.println(list.get(2));}//抛出IO异常@RequestMapping("showIOException")public void showIOException() throws IOException {FileInputStream in = new FileInputStream("JavaWeb.xml");}//抛出算术异常@RequestMapping("showArithmetic")public void showArithmetic() {int c = 1 / 0;}
}
3、在Spring MVC的配置文件spring-mvc.xml中使用SimpleMappingExceptionResolver指定异常和异常处理页面的映射关系。Spring MVC配置文件的部分配置如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置创建 spring 容器要扫描的包 --><context:component-scan base-package="com.test.controller"/><!-- 配置注解驱动 --><mvc:annotation-driven/><!--配置静态资源的访问映射,此配置中的文件,将不被前端控制器拦截 --><mvc:resources mapping="/js/**" location="/js/"/><!-- 注入 SimpleMappingExceptionResolver--><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><!--定义需要特殊处理的异常,用类名或完全路径名作为key,对应的异常页面名作为值,将不同的异常映射到不同的页面上。
--><property name="exceptionMappings"><props><prop key="java.lang.NullPointerException">nullPointerExp.jsp</prop><prop key="IOException">IOExp.jsp</prop></props></property><!-- 为所有的异常定义默认的异常处理页面,value为默认的异常处理页面 --><property name="defaultErrorView" value="defaultExp.jsp"></property><!-- value定义在异常处理页面中获取异常信息的变量名,默认名为exception --><property name="exceptionAttribute" value="exp"></property></bean>
</beans>
4、创建异常处理页面。在此不对异常处理页面做太多处理,只在页面中展示对应的异常信息。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>空指针异常处理页面</title></head>
<body>
空指针异常处理页面-----${exp}
</body>
</html>
5、启动chapter13项目,在浏览器中访问地址http://localhost:8080/chapter13/showNullPointer,程序将执行showNullPointer()方法。
程序在抛出异常时,会跳转到异常类型对应的异常处理页面中。如果抛出的异常没有在Spring MVC的配置文件中指定对应的异常处理页面,那么程序会跳转到指定的默认异常处理页面。
相关文章:
Spring MVC的高级功能——异常处理(一)简单异常处理器
一、HandlerExceptionResolver接口 如果希望对Spring MVC中所有异常进行统一处理,可以使用Spring MVC提供的异常处理器HandlerExceptionResolver接口。Spring MVC内部提供了HandlerExceptionResolver的实现类SimpleMappingExceptionResolver。它实现了简单的异常处理…...
【面试干货】Static关键字的用法详解
【面试干货】Static关键字的用法详解 1、Static修饰内部类2、Static修饰方法3、Static修饰变量4、Static修饰代码块5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java编程语言中,static是一个关键字,它可…...
软件工程实验
实验环境和需求 用户可以对相片进行按类别管理,用户可以设定不同的类别,然后上传照片到相应的类别中,并能进行照片的删除,注释 运行 运行并访问 localhost 8090,图片在数据库中的信息是D:/upgrade 后面的内容 se…...
对于复杂的网页布局,如多列布局和网格布局,CSS 有哪些最佳实践和技巧?
对于复杂的网页布局,如多列布局和网格布局,以下是一些CSS的最佳实践和技巧: 使用Flexbox或CSS Grid布局:Flexbox和CSS Grid是两个强大的CSS布局模型,可用于实现复杂的网页布局。Flexbox适用于单行或单列布局࿰…...
Spring Boot中集成Redis实现缓存功能
Spring Boot中集成Redis实现缓存功能 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何在Spring Boot应用程序中集成Redis,实现…...
arco disign vue 日期组件的样式穿透
问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…...
【深度学习】pytorch训练中的一个大坑
使用的命令:iostat -x 5 可以看到 ssd的利用率已经满了。 之前在的数据集放在了 hdd上,训练结果特别慢。 所以我把它移动到了ssd上,然后训练参数用的 resume, 但是!!!!它把历史记住…...
python全局解释器锁(GIL)
文章目录 1.cpu工作方式2.python全局解释器锁与多线程3.其他语言的多线程4.如何解决假的多线程 1.cpu工作方式 先来先服务(First Come, First Served,FCFS): 最简单的调度算法,按照作业或进程到达的顺序依次执行。没有…...
无人机的起源
无人机起源于20世纪初的早期实验阶段,并随着技术进步逐步发展。无人机,作为现代科技领域中的一项重要创新,已经在全球范围内展现出其巨大的潜力和应用价值。 无人机的历史可以追溯到1917年,美国人艾德温.奥斯特林发明了“飞行训练…...
专题六:Spring源码之初始化容器BeanFactory
上一篇咱们通过一个例子介绍初始化容器上下文相关内容,并通过两个示例代码看到了Spring在设计阶段为我预留的扩展点,和我们应该如何利用这两个扩展点在Spring初始化容器上下文阶段为我们提供服务。这一篇咱们接着往下看。 老这样子下回到refresh方法上来…...
缓存双写一致性(笔记)
缓存更新方案 旁路缓存模式 这是比较多的 旁路缓存模式:缓存有就返回,没有数据库查询,放入缓存返回。 还有些常用缓存策略 读穿透模式 读穿透和旁路很相似,程序不需要关注从哪里读取数据,它只需要从缓存查询数据。…...
运动馆预约管理系统设计
设计一个运动馆预约管理系统,需要考虑到用户需求、系统功能、技术实现和用户体验等多个方面。以下是一个基本的设计框架: 1. 系统目标 提供便捷的运动场地预约服务。 实现运动馆资源的有效管理和利用。 支持在线支付,提高交易效率。 提供数…...
第五届计算机、大数据与人工智能国际会议(ICCBD+AI 2024)
随着科技的飞速发展,计算机、大数据和人工智能等前沿技术已成为推动社会进步的重要力量。为了加强这一领域的学术交流与合作,促进技术创新与发展,第五届计算机、大数据与人工智能国际会议(ICCBDAI 2024)将于2024年11月…...
高效的向量搜索算法——分层可导航小世界图(HNSW)
最近在接触大模型相关内容,发现一种高效的向量搜索算法HNSW,这里做一下记录。 在之前自己也接触过一段时间的复杂网络(网络科学),没想到,将网络科学的思想引入到向量搜索算法中,可以产生令人眼前…...
【MySQL备份】Percona XtraBackup全量备份实战篇
目录 1. 前言 2.准备工作 2.1.环境信息 2.2.创建备份目录 2.3.配置/etc/my.cnf文件 2.4.授予root用户BACKUP_ADMIN权限 3.全量备份 4.准备备份 5.数据恢复 6.总结 "实战演练:利用Percona XtraBackup执行MySQL全量备份操作详解" 1. 前言 本文…...
港口危险货物安全管理人员考试题库(含答案)
一、单选题 1.化学品安全标签内容中警示词有( )种分别进行危害程度的警示。 A、3 B、4 C、5 参考答案:A 2.运输放射性物品,应当使用( )的放射性物品运输包装容器(以下简称运输容器)。 A、专业 B、专用 C、统一 D、定制 参考答案:B 3.库区仪表及计算机监控管理系…...
什么是 JVM( Java 虚拟机),它在 Java 程序执行中扮演什么角色?
JVM,全称Java Virtual Machine,中文译作“Java虚拟机”,它是运行Java程序的软件环境,也是Java语言的核心部分之一。 想象一下,如果你是一位环球旅行家,每到一个新的国家,都需要学习当地的语言才…...
Python容器 之 列表--下标和切片
列表的切片 得到是 新的列表字符串的切片 得到是 新的字符串 如果下标 不存在会报错 list1 [1, 3.14, "hello", False] print(list1)# 获取 列表中 第一个数据 print(list1[0]) # 1# 获取列表中的最后一个数据 print(list1[-1]) # [False]# 获取中间两个数 即 3.1…...
Docker 运行Nacos无法访问地址解决方法
参考我的上一篇文章去配置好镜像加速器,镜像加速器不是配置越多越好,重试次数多了会失败 Dockerhub无法拉取镜像配置阿里镜像加速器-CSDN博客 错误的尝试 最开始按照网上的方式去配了一大堆,发现下不下来。 镜像源地址:https:…...
Stable Diffusion 商业变现与绘画大模型多场景实战
前言 ai绘画软件Stable Diffusion是一种通过模拟扩散过程,将噪声图像转化为目标图像的文生图模型,具有较强的稳定性和可控性,可以将文本信息自动转换成高质量、高分辨率且视觉效果良好、多样化的图像。在日常工作中,ai绘画软件St…...
fft npainting lama图像修复系统:5分钟上手,轻松去除图片水印和杂物
FFT Npainting Lama图像修复系统:5分钟上手,轻松去除图片水印和杂物 1. 系统概述 1.1 什么是FFT Npainting Lama FFT Npainting Lama是一款基于深度学习的图像修复工具,能够智能移除图片中的水印、杂物和不需要的物体。它结合了快速傅里叶…...
LabVIEW 2018+ 也能玩转OpenCV了?手把手教你用秣厉科技工具包实现摄像头人脸识别
LabVIEW与OpenCV的跨界融合:零代码实现工业级视觉检测方案 当图形化编程遇上计算机视觉,会碰撞出怎样的火花?对于习惯了LabVIEW数据流编程的工程师来说,OpenCV那些复杂的矩阵运算和算法实现往往令人望而生畏。而现在,…...
重装系统后的环境快速恢复:包含BERT模型部署的自动化脚本
重装系统后的环境快速恢复:包含BERT模型部署的自动化脚本 重装系统,对开发者来说,就像一场“数字大扫除”。清爽是清爽了,但看着空空如也的终端和待部署的一长串服务列表,那种从头再来的疲惫感瞬间涌上心头。尤其是当…...
手把手教你用ENA-TDR实测USB3.0线:阻抗、延时、串扰一个不漏
深度解析USB3.0线缆全参数测试:从TDR原理到实战报告解读 在高速数据传输领域,一根优质USB3.0线缆的价值往往被严重低估。当工程师们为系统稳定性问题焦头烂额时,很少有人会想到问题可能出在那根不起眼的连接线上。事实上,根据行业…...
Kazumi WebDAV同步功能详解:实现跨设备番剧数据互通的无缝体验
Kazumi WebDAV同步功能详解:实现跨设备番剧数据互通的无缝体验 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi …...
CH340/CH341安卓USB主机模式开发实战
1. CH340/CH341安卓USB主机模式开发入门 很多开发者第一次接触安卓USB主机模式开发时,都会遇到一个典型问题:为什么我的手机连上CH340模块后毫无反应?这通常是因为安卓设备默认工作在从机模式(USB Device Mode),而连接串口设备需要…...
TTI-Chicago等机构突破性研究:AI学会了一笔一划创作矢量草图
这项由芝加哥丰田技术研究院(TTI-Chicago)、芝加哥大学和麻省理工学院联合开展的研究发表于2026年,论文编号为arXiv:2603.19500v1。有兴趣深入了解技术细节的读者可以通过该编号查询完整论文。当我们看到一位画家创作时,他们通常不…...
厦门选117E还是120E?手把手教你为你的城市选择正确的高斯克吕格投影坐标系
厦门GIS项目实战:如何精准选择高斯克吕格投影坐标系 第一次在ArcGIS里看到上百个坐标系选项时,我的鼠标指针在列表上方徘徊了整整十五分钟——就像站在自动售货机前不知道按哪个按钮的新手。特别是当项目 deadline 临近,而厦门市规划局的Shap…...
MyBatis批量更新避坑指南:从`<foreach>`拼接SQL到`allowMultiQueries`配置的完整流程
MyBatis批量更新实战:从基础实现到性能调优全解析 批量更新操作是后端开发中绕不开的高频需求,但很多开发者在初次接触MyBatis批量更新时,往往会陷入各种"坑"中。本文将带你系统掌握两种主流实现方案,从基础用法到性能优…...
Java泛型中的List
本文将详细回答java泛型中的listt extends base>使用问题。 在java中,泛型提供了强大的类型安全机制,但其一些特点也容易引起混淆,如listt extends base>开发者经常感到困难。假设sub是base的子类:public class base { }pub…...
