00:00
好,接下来来说一下spring boot的异常处理机制,我还是来参照spring boot官方文档加来这个高级特性这个章节来点进来,那现在是来开发web应用,来到这一块呢,第七章这是develop web开发web应用,在第十章节呢,有一个错误处理s boot呢,官方用这么一大段话,包括下边呢,描述了它的一些错误处理机制,那老师翻译过来呢,就是这样来逐条对比一下,首先第一个部官方说body put默认情况下呢,它会提供一个杠error的这个map,相当于有一个错误的这个映射,这个呢来处理我们所有的这个错误,说一旦我们发生错误以后,会被转发到这个杠I,然后呢,这个杠A给我们产生的这个行为,就是如果我们是一个机器客户端,它会给我们产生一个杰森的相应数据,里边呢包含我们的这个错误的HTP状态码这些信息,以及我们的异常信息,而如果我们呢是一个浏览器客户端,它呢还会给我们产生一个白页。
01:01
这个白页里边呢,也渲染了跟我们之前一模一样的信息,比如the same data对吧,里边有HTML,里边包含了我们的错误信息,错误状态码等一大堆信息,如果我们想要自定义呢,他说你可以添加一个视图名叫errorrrow,然后呢,等等等等等,或者呢,你添加一个自定义的error,呃,Attributes,或者error controller,那我们最终呢,翻译过来就是这样,默认情况下会们有这个杠error处理,我们可以来先体验一下s spring book的整个默认的错误处理的环节,好我们先来看一下他说的第一个,如果一旦有错误会转到杠L,而且呢,如果是机器客户端产生接S,如果是浏览器客户端产生一个错误页,好我们可以来确认一下,那么现在呢,是这个页面,这个页面呢,我们来刷新一下,来看一下,好,我们现在是登录成功的,那我先来做一件事情,我来访问一个不存在的,我来回车,那这是一个不存在的页,如果在我们的浏览器端,我们响应的是一个页面,不,我们用其他客户端测试,非浏览器客户端我可以拿抛S卖。
02:01
检测一下,我们来看它响应的是一个什么,把这个复制过来。来粘贴到这儿,好,我们来发送请求,但发送请求呢,它给我们响应的也是一个页面,只不过这个页面呢,让我们请先登录,诶因为我们没有登录,而我们这一块呢,想要模拟我们这个登录,我们有拦截器的存在,所以我们在这呢,发请求的时候,记者我们也把这个cookie带上,这有一个解session ID的这个cookie复制,那么在这呢,为了模拟我们现在是登录了,我们在图里边,我们来给它带上cookie cookie。那cookie里边呢,就带解测ID,那这就登录了我们来send,哎,我们发现如果我们是呢,这个客户端,如果我们是非浏览器客户端,他们呢,会给我们响应一个杰森,而如果是我们浏览器客户端,它会给我们响应一个页面,那这个页面跟杰S里边内容都一样,有我们的这个时间戳信息。来看到在这个页面里边呢,这是我们的当前时间戳,然后呢,包括有我们的状态码信息,还有我们的这个错误的原因信息,Not found,包括我们有没有带异常的,呃,内容no message没有包括呢,我们是哪个路径发生了错误,哎,那在这呢,其实都携带了整个完整的信息,甚至于呢,我们可以来做另外一个测试,我们是任何异常都是这样,如果我们假设测试这有一个请求int,我们I等于十除零,我们就在这个请求里面测试,如果我们呢,现在是一个数学运算异常,来看一下不同的客户端,那么的响应能力是什么。
03:36
好,我们把这个复制过来,来访问它回车,那现在呢,我们要先登录这一块,我们来清掉,好登录进来,我们来准备登录一下,好,那么现在呢,这个我们登录了我们的basic table,如果呢,是浏览器端,我们还是响应页面,而如果是其他客户端,我们把这个cookie呢,重新复制过来。
04:03
做一个测试。那这这一块的cookie我们来给它删掉,这是我们新的解ID,我们来访问路径,因为这个路径呢,会给我们有一个错误,来看一下效果回车。好,那我们发现呢,它也是给我们响应的是一个杰S非浏览器客户端,杰S里边呢,就包含这些内容,那我们可以把整个的这个杰S给大家截个图,这个杰S呢,稍微有点长,那么来响应一个来访问一个404的,那现在呢,我们就来看到了boot官方的默认的这个效果来记录到这来我们总结了一下,如果是这个客户端,它响应杰森,杰森里边包含的内容就是这些,而且呢,如果我们想要自定义,哎,它呢也给我们官方文档也说了,你可以用errorro ctrler,也可以添加errorro视图等等,而且呢,官方在后边还有这么一个描述,来都看一下,它默认行为可以custom,我们可以自定义我们的错误页面,什么叫自定义错误页面,我们可以比如经常会产生一些404或者500的这些内部异常,你可以把这些异常页面放在静态资源文件夹下的error这个路径下,或者呢,放到我们模板引擎,如果我们需要用模板引擎解析放到。
05:20
次这个文件夹下,也就是说我们现在呢,还有一个默认规则,就是我们放在iro这个目录下的四叉叉五叉叉页面会被自动解析来看一下这个效果,那我们现在呢,我们这个里边呢,容易发生的请求就是服务器的内部异,类似于这些啊,我们突发的异常,或者呢,就是这404,那404呢,我们本不应该响应这个页面,因为这个页面呢,跟我们整个风格不统一,我们看到我们这个整个风格呢,这是后台管理系统的这个,而后台管理系统呢,人家也有自己的默认的这些错误页啊,错误页的模板我们来看一下啊,在这个模板里边呢,专门有我们的这个错误页,我们来看有没有它提取的一些错误页信息在他的这个,哎,扩展的页面里边,诶,比如人家404页面长这样,然后呢,包括我们他们的这个服务器内部异常页面,那长这样,所以呢,我们希望真正的服务器发生了一些异常,我们如果是页面,我们让他呢给。
06:20
我们能响应这些页面,我们自己的模板页面,那我们就可以这么来做,那我们要做的做法呢,就是我们需要在这给在pen这个文件夹下,或者你在静态资源文件夹下来,我们可以放在模板引擎下,这样呢,我们过一个模板引擎还能在页面取内容,我们在这个文件夹下呢,放一个叫杠L这个文件夹,相当于有这么一个路径,然后接下来呢,在它里边你放上你的这个页面,我们来打开,把我们的这个模板引擎里边的这两个页面放上来,CTRLCCTRLV,然后呢,我们把这个页面的这个名称空间加上,因为我们现在要过模板引擎,记得加上这个名称空间。
07:03
走。那如果是我们这种情况下,而且呢,这个500,因为我们服务器内部异常可能很多,不止是500,我们各种状态嘛,以五叉叉开头的都是服务器内部异常,所以呢,我们在命名的时候,我们可以写成这样叫五叉叉,也就是说所有的这个五五开头的错误状态呢,都会响应这个页面,那如果我们加上这么一个默认规则以后,我们来看一下现在的效果,我们在模板引擎上加了两个它。来到这儿来看一下我们现在的效果,那以前的这个页面呢,四零四五百都是默认的这个白页,我们来看一下默认的这个白页效果,白页效果呢,我们现在好,现在随便来访问一个,我们把这个白页效果呢也截图在这儿,而我们看一下现在我们按照它的这个,这是杰森效果,这是白页效果,你不同的客户端给你响应的是不同页,好,那接下来我们来看一下,我们加入了自定义的这两个四叉叉五叉叉页面以后所有的自零四,那就会给我们跳到这个页,所有的五叉叉,那就跳到这个页,我们可以来确认一下。
08:20
好,还是我们的这个管理系统,我们现在来回车,那回车以后呢,我们来重新给它登录进来,走登录进来好,我们现在来访问一个不存在的走,哎,我们看到呢,这一块呢,接下来就是响应的我们自定义的这个错误页,哎错误页呢要去哪?哎它现在呢,要访问index index也不存在,你可以把404这个页面可以改一下,看到有一个叫bank to home back to home,好,它真正的链接地址呢是TH,哎,我们应该是慢页面。And,福大括号,你给我来到当前项目下的卖页面卖点HTM,我是不是有一个去卖页面的请求,可以看一下我们之前的这个CTRL去慢页面的请求是哪个请求,诶我们就叫慢点HTML没问题,好,我们把它CTRLF9来编一下。
09:16
来刷新,好,现在是404,我们点一个bank,好这就回来了,所以呢,如果我们在这访问一个不存在的路径,现在就来到我们自定义的404页面,然后呢,或者我们来访问它,访问它呢来到我们自定义的500页面,而且这个500页面呢,我们还可以取出错误信息,因为们都知道,像默认的错误信息呢,如果是杰森,它能取出这么多的内容,所以我们其实去页面也能取出这些内容,比如们来到五叉叉页面,我们的这个五叉叉页面呢,我们想让它响应的更多,这一块的五叉叉呢,它这something,什么went round,然后这一块都是他自己的内容,我希望呢,在这响应我们到底是什么错误,然后呢,在下边打印出错误对战啊,那我们就可以这么来取,大家看,因为我们这个错误页呢,默认给我们包了这些内容,所以我们可以给这首先第一个叫error,那就是当前页面到底是什么错误,我们把这个error信息拿来,然后呢,包括它有没有什么啊错误的对战信息,我们也可以拿过来,所以我们在这儿可以打。
10:16
印一下这两个,我们来到500页面,500页面呢,我们把这个粗体我可以打印成th test打印成一个什么呢?Dollar大括号我来取值,那发现这个错误里边呢,其中就有一个message,这叫错误消息,对吧?我们现在呢,你到底是什么错误,我们可以取一个message,然后呢,接下来如果是错误的对战信息,我们TH,我们也可以test打印一下,打印一个什么呢。我们来打印一个叫tra,它的整个这个对战到大号,我们打印一下它,我们现在来重新CTRLF9来编译一下这个页面,所以这些呢,其实都是我们这个错误默认能给我们响应的内容来刷新一下,好我们发现了这要8ZERO没问题,我们是处理异常,然后呢,整个处林的对战信息全部能打过来,你想取哪些,只要阶S里边这些包含有的我们都能取到,那我们现在呢,能看到只有这几个阶S,那实际上真正有哪些角色,我们下一节可以下一节课看源码的时候呢,我们在底层就能看到了,其实这就是我们说的整个在boot里边,我们呢,在这它给我们的这个默认的一些错误处理机制,但是实际在开发中呢,我们需要自定义一些错误处理,那么下一节课呢?来看一下我们如何自定义一些错误处理规则。
我来说两句