00:00
下面我们来看一下VC的异常处理,首先回想一下strat two是如何处理异常的,实际上在stra to那action方法里面可以不处理异常,对不对?然后呢,把这个异常直接抛stra to框架。我们需要在r to X文件里边配置一个或多个exception mapping节点叫什么?异常映射里边会有两个属性,一个是异常的全类名,然后的话呢,我们还需要配一个路径。当action方法抛出异常的时候,Spring VC。错了哈,Trut框架会找到对应的。Exception mapping节点,然后呢,根据exception mapping节点的情况转向对应的页面,在页面上还可以使用OGL把那个异常打出来是吧?这是我们使用r two处理的情况,VC处理的效果。
01:03
跟抓处理效果差不多,但是使用起来更简单。OK,看一下,虽然VC通过handler excepting reserve来处理程序的异常,包括handler映射。数据绑定以及目标方法执行时发生的异常叫handler excepting reserve。我们来看一下这个类。CTRLTCTRLV。呃,我们发现这是一个接口。CTRLT,哎,我们从这块儿的话呢,可以看到这个接口有哪些实现类是吧,这个图呢,我已经截下来了。在这儿。这个接口常用的时现类呢,有这样的四个1234,我就不再一个一个读了哈,下面我们来看一下我们平常开发的时候,Dispat默认配置了哪些handle except,如果我们使用了这个mvc notation drive的话呢,它配置了这样的三个handler except reserve,要是没有使用这个MV notation drive的这个配置呢,配置是这三个我们发现啊。
02:17
这两组呢,后两个是一样的,第一组不一样,其中如果要是没有加上这个配置的话呀,这个叫an notation method handle exam reserve,这已经过期了,这个呢,需要使用这个except hundred exam reserve去替代它,再加上我们通常情况下我们都需要加入这个配置吧,哎,所以说我们讲的话呢,我们主要来讲这样的三个重点是。第一个好了,我们首先来看一下这个PA这个配置的情况。我们目标方法找到这个218N,我加了一个断点。周琦。
03:02
点一下。好的,我们找到dispat。过来我们看一下。Handler exception。不是这个后边的是吧,这个打开打开,诶这块呢,有三个hand except reserve的实现类,我这个图就是从这块儿截的,只不过就是一个,呃,加上这个配置,一个不加配置,我们讲的话呢,主要是讲加这个配置的,开发的时候这个配置项是一定要加的,对吧?好,我们这节课主要来说第一个,下节课呢来说后两个叫。Exception handler,它干什么呢?它主要处理使用。Exception handler这个注解定义的方法。OK,我们通过实例来说一下。首先这个我先停掉,我在这个handler里边,我来定义一个方法。
04:05
Public test exception pan exception,我返回一个success request mapping。CTRLCCTRLV。好的页面上呢,也需要来加上一个。对应的一个超链接。把这个复制过来。CTRLC。CTRL,我们注意到我加一个参数I等于十。CR非。I,我把这个给它映射进来是吧,Request I。
05:06
Int。打印一句话,Result result加十除以I搞定,现在呢,这个程序我来运行一下,看一下效果。最后一个超链接,我点一下,我们注意到。打印的结果是一对吧。好的,输入二呢,答案结果是五是吧,下边输入零呢。是不是于发生一个数学异常啊,走一个,哎,我们看到这个时候呢,会发生一个数学异常,我们没有处理啊,这个异常就直接抛出来了,下面我们就来处理这个异常,我们CTRLC好了,怎么处理呢?我在这个handle里边,我来写一个方法,String handle。
06:11
Handle,这个数学异常,我return一个error。At handler。Exception handle,看到了吧,它有一个value属性,这里的是一个class数组,我们直接把这个给它。复制进来,我在这个目标方法里边,我还可以来标记一个异常,Exception ex sit out,告出异常了。出异常了,加ex。对吧。然后我去error,我去这个erroro的话呢,我需要去写一个页面不是。在这儿。新建一个Jsp.JSP。
07:04
写一下H4A page,先看效果。走起。刷新好的,我们看到这个异常呢,被打印了,然后这个error error page页面也来了,看见了吧,诶挺顺畅的,那这个时候的话呢,我们就使用这个方法和这个注解取代了stra to,我们配置那个exception mapping,对吧。这里边儿有几个需要注意的细节,第一个细节,我们怎么样把这个页面带到,我们怎么样把这个异常带到页面上呢?呃,正常的想法就是搞一个map进去。写一个string object map是吧?
08:00
卖不点put?Con ex。保存看一眼。停掉。走起。刷新我们看到这个时候啊,我们这个exception handler反倒不好用了,看见了吗?诶加map不好使,那怎么办啊。那怎么办啊?我可以使这个返回值是什么呀?是Mo段的view不就可以了吗?细节第一个。在这个这个方法入参中。入参中,参数中可以加入exception类型的参数,该参数G对应发生的。
09:17
异常对象二入参中,这个方法的入参中不能传入map落,希望把异常信息传到页面上需要。使用什么呀?Model and view作为返回值,OK,那我们来写一个model and view写好。这个暂时就拿掉,不好使,这玩意儿是吧,停一下。
10:05
拿掉model and view MV等于new and。View名字叫A。返回这个结果呢?MV,好了,我来加那个异常信息MV.add object看着section ex页面上想打印一下这照。怎么写exception对吧,再看效果。刷新诶页面上呢,这个异常就可以进行打印了,看到了吧,下一个问题关于异常优先级的问题。这个方法吧,标记的异常有优先级的问题,什么意思呢?就是说我这一块啊,我标识了一个什么呀,我标识了一个数学异常,我再写一个方法。
11:16
Control c。CTRLV,我写个二吧。我写个二吧,我这块的话呢,我来标记runtime exception。方法啊,我这样标记加一个标记哈,大家看到了,我加了一个标记,就是说我这个出异常啊,我加了个什么呀,我加上这样的一个括号,好了,我来问大家,这个时候如果我这个目标方法要是抛异常的话。这块还泡数学异常吧,我找的是哪个方法呢?我找的是这个方法呢,还是上面二这个方法呢?能想到吧,显然这个方法标记这个异常离我们抛的异常是不是更近一点啊,换句话说匹配度高一点,所以说应该找。
12:04
这个而不是走它能理解吧,先看效果。走起。哎。我们看。呃,并不带那个括号停掉,我把这个给它注掉。这个时候怎么了?这个时候你想精确匹配的话,配不上了吧,那好了,我退而求其次,我来,我来找他。走起。再刷新。看见了吧。这是我们说的这个优先级的问题,好了,我把这个给打,我把这个也关掉。都关了怎么办呢?这样的就是说默认情况下呀,我们在这个方法里边标记这个exception handler只能够处理当前handler当前handler方法里面的异常,而不是一个更全局的,那么我可以定义一个exception handler吗?
13:10
我们写一下哈,这个except handler,就是处理异常的exception handler看到了吧,诶这个handler我们以前写的时候,我们怎么写啊,我们都是使用什么component。Service controller或者是reporter进行修饰吧,今天呢,我们来用一个新的注解,这个注解叫controller advice。写上了,然后呢,我把这个方法给它复制过来。这样我先不复制,不复制我们先看一眼,不复制显然怎么了,这个时候没有处理异常的呀。出错了是吧,现在我把这个给它复制过来,复制哪个都可以,我们复制这个精确匹配的吧,CTRLC。
14:04
CTRLV打开。好,我也写了CO。Exception handler。哦。这个名字写的不对是吧,都一样,F2,我叫exception。Handler。Handle exception吧。这个名一样不行,一样的话那个主机倒不进来是吧。CTRLC的O。好的,哎,可以进来了哦,这个名,哎,Exception handler。好的,哎,除异常呢,我这块再加点标记,加了一个箭头走起看一下。
15:01
刷新大家看到看到什么了,又可以正常的处理异常了,看见了吗?而且呢啊,我这块这个打印的确是我们这个。呃,Controller advice标记这个类里面进行异常处理的,对吧,那第三点呢,我们就来说一下这个controller advice。在哪呢?在这儿不是第三点第四点啊,关于它。说如果,如果在如果在当前handler中找不到,找不到,找不到exception handler。方法来处理,当前方法出现的一层则将去这个写差了哈。
16:09
这个标记的类中查找。这个标记的方法。来处理异常看见了吧,哎,以上的话呢,就是我们说的这个叫。Exception handler,那这个呢?挺常用的。嗯,有点类似于我们写的那个什么呀,抓图里边那个exception mapping,不过呢,我们这个是基于方法和注解的方式。那里边儿我们还可以去写一些逻辑的东西是吧,所以说更加的灵活。
我来说两句