当前位置: 首页 > news >正文

SpringBoot异常处理——异常显示的页面

文章目录

    • 导言
    • 实现步骤
      • 加入thymeleaf依赖
      • 然后创建controller
      • 使用X进行模糊匹配
      • 统一错误页面显示

导言

默认情况下,SpringBoot 项目错误页面如下:

在这里插入图片描述
在这里插入图片描述

直接这样太丑了,我们实际上线项目时,如果给用户显示这个页面就不是很友好,用户直接不用了。

所以当系统出现异常时应该给用户更加友好的错误页面,下面我们来看具体是如何实现的。

实现步骤

加入thymeleaf依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在templates/下新建error文件夹
在这里插入图片描述

在error中新建:状态.html的页面。例如当出现500时显示的页面为500.html,当出现404时显示的页面为404.html,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>
    <h1>
        404!没有这个请求,请检查!
    </h1>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>500</title>
</head>
<body>
    <h1>
        500!您的代码出现了内部错误,请检查!
    </h1>
</body>
</html>

然后创建controller

@Controller
public class ErrorController {

    @RequestMapping("/test")
    public String testError(){
        System.out.println(5/0);
        // return "500";
        return "500.html";
    }
}

我们知道,在运行上面代码的时候发生算术异常。错误码为500。

测试如下:

在这里插入图片描述

使用X进行模糊匹配

  • 当出现5开头状态码的错误时,显示页面可以命名为5xx.html
  • 如果500.html和5xx.html同时存在,则会精确匹配相应页面。

我们把刚才的500.html改为5xx.html,也是可以的
在这里插入图片描述

因为发生了5开头的异常,会走5xx.html,测试如下:

在这里插入图片描述

统一错误页面显示

在templates下新建error.html。如果项目中不存在具体状态码的页面或没有使用x成功匹配的页面时,显示error.html作为错误显示页面。

比如我们在error下没有设置4xx相关的错误页面,当发生状态码为4xx的错误时,找不到相关的错误处理页面,这时会走一个统一的错误处理页面。一般会在templates下创建error.html,作为统一的错误处理页面。

在templates下创建error.html
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>error</title>
</head>
<body>
    <h1>
        error!!!
    </h1>
</body>
</html>

当发生404错误时,会自动走error.html

在这里插入图片描述

相关文章:

  • 高等数学二从零开始学习的总结笔记(持续更新)
  • 无服务器学习01:基本概念+优点+面临的挑战
  • C#实验二
  • 熟悉c语言结构体
  • uboot源码分析(基于S5PV210)之启动第二阶段
  • 【分布式】分布式系统、Redis中间件 、Cache穿透、击穿、雪崩
  • Rust基础语法
  • 电子知识学习网站
  • 全站最简单 “数据滚动可视化大屏” 【JS基础拿来即用】
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(开发导航栏及公共部分)
  • ScalableViT网络模型
  • Nginx配置流数据转发指导
  • 【单细胞高级绘图】10.KEGG富集结果的圆圈图
  • 怎样在应用中实现自助报表功能?
  • 生成指定位数的随机验证码
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • $translatePartialLoader加载失败及解决方式
  • (三)从jvm层面了解线程的启动和停止
  • Android Studio:GIT提交项目到远程仓库
  • Angular 响应式表单之下拉框
  • Docker入门(二) - Dockerfile
  • extjs4学习之配置
  • GraphQL学习过程应该是这样的
  • Hibernate【inverse和cascade属性】知识要点
  • Java深入 - 深入理解Java集合
  • React-redux的原理以及使用
  • Service Worker
  • 阿里云应用高可用服务公测发布
  • 分布式事物理论与实践
  • 机器学习 vs. 深度学习
  • 每天一个设计模式之命令模式
  • 世界上最简单的无等待算法(getAndIncrement)
  • 收藏好这篇,别再只说“数据劫持”了
  • 数据结构java版之冒泡排序及优化
  • 新书推荐|Windows黑客编程技术详解
  • 一文看透浏览器架构
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • # 安徽锐锋科技IDMS系统简介
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十一)手动添加用户和文件的特殊权限
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • ******之网络***——物理***
  • .Net 6.0 处理跨域的方式
  • .NetCore项目nginx发布
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • @EnableConfigurationProperties注解使用
  • @在php中起什么作用?
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例