共计 1306 个字符,预计需要花费 4 分钟才能阅读完成。
异样解决步骤流程
设置异样:
步骤:
1、执行指标办法,如果指标办法执行胜利就返回 ModelAndView,然而指标办法运行期间有任何异样都会被 catch、而且标记以后申请完结;并且用 dispatchException
封装异样
2、进入视图解析流程(页面渲染?)
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
如果指标办法正确执行,mv 就有值,然而下面指标办法有异样,所以 mv 就是空,并且 dispatchException 是算数异样
3、mv = processHandlerException;解决 handler 产生的异样,解决实现返回 ModelAndView;
-
1、遍历所有的 handlerExceptionResolvers,看谁能解决以后异样【
HandlerExceptionResolver 处理器异样解析器
】解决完异样后,如果后果不为空,就返回 ModelAndView
2、零碎默认的 异样解析器;
-
1、DefaultErrorAttributes 先来解决异样。把异样信息保留到 rrequest 域,并且返回 null;
-
相当于调用这个办法,这个接口规定如果自定义了一个异样解析器,方才是哪个指标办法产生了异样,而后能够在这个办法外部自定义这个异样该怎么解决,只须要返回一个 ModelAndView。所以最终你哪怕是自定义异样解析器,你也要给我返回一个 ModelAndView,这样 spring 底层就会晓得异样解决完要跳转到哪个页面,页面里放什么数据。
遍历完默认的异样解析器后发现解决不了,所以异样会被抛出
- 2、默认没有任何人能解决异样,所以异样会被抛出
■ 1、 如果没有任何人能解决最终底层就会发送 /error 申请。会被底层的 BasicErrorController 解决
■ 2、 解析谬误视图;遍历所有的 ErrorViewResolver 看谁能解析。
■ 3、默认的 DefaultErrorViewResolver , 作用是把响应状态码作为谬误页的地址,并拼接成 error/500.html■ 4、模板引擎最终响应这个页面 error/500.html
-
总结:如果产生了异样,会调用零碎的默认异样解析器解析,如果零碎的默认异样解析器解析不了,底层就会发 /error 申请,转给 BasicErrorController 解决,BasicErrorController 调用底层的 ErrorViewResolver 解决。(你也能够自定义 ErrorViewResolver,决定怎么解决)
次要牵扯到两个环节:(1)会调用零碎的默认异样解析器解析,零碎的默认异样解析器能不能解析。(2)DefaultErrorAttributes 永远返回为空,相当于它只保留了一个错误信息,保留错误信息
的意义其实就是为了下次,下次如果没有任何人能解决,就会发 /error 申请,而咱们又从申请域
中拿到上次的错误信息,相当于数学的算术异样。所有的异样解析器都解决不了,最终调用底层的
默认异样错误处理机制 DefaultErrorAttributes,最终失去谬误页。
正文完