美文网首页
第10章 异常处理

第10章 异常处理

作者: yangsg | 来源:发表于2019-01-22 16:52 被阅读0次

常规B/S结构网站的异常处理主要有两种方式

  • 根据HTTP协议码
  • 根据异常类型

SpringBoot中关于两种方式异常处理都给予了一定的支持

根据HTTP协议码处理异常

SpringBoot中没有web.xml文件,故需要一些其他方法完成相应操作。
新建错误页面

  • 在resources/static文件夹下新建404.html,505.html
  • 在resources/templates文件夹下新建error.html
    1.通过拦截器
    编写全局拦截器,在postHandler中根据相应状态码进行相应处理
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, 
          Object handler,ModelAndView modelAndView) throws Exception {
      if(response.getStatus()==500){
            modelAndView.setViewName("/500.html");
      }else if(response.getStatus()==404){
            modelAndView.setViewName("/404.html");
      }
}

注册拦截器时,拦截范围设置为: /**
2.自定义Controller,实现ErrorController接口
SpringBoot默认通过/error处理异常,编写类重写ErrorController接口并重写相关逻辑即可实现相关效果

MyErrorHandler.java

@Controller
public class MyErrorHandler implements ErrorController{
    
    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if(statusCode == 404){
            return "redirect:/404.html";
        }else if(statusCode == 500){
            return "redirect:/500.html";
        }else{
            return "redirect:/error.html";
        }
    }

    @Override
    public String getErrorPath() {
        return "redirect:/error";
    }
}

根据异常类型处理异常

新建com.neuedu.exception包,新建类GlobalDefaultExceptionHandler。
同时使用@ControllerAdvice注册该类

GlobalDefaultExceptionHandler.java

package com.neuedu.exception;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class GlobalDefaultExceptionHandler {

     @ExceptionHandler(value = Exception.class)
     public ModelAndView defaultErrorHandler(HttpServletRequest req,Exception e) {
         System.out.println("全局异常执行");  
         ModelAndView mv = new ModelAndView();
         mv.addObject("exception", e);
         mv.addObject("url", req.getRequestURL());
         mv.setViewName("/error.html");
         return mv;      
     }
}

其中,方法上方的@ExceptionHandler注解表示处理的异常类型,本文中选择Exception,即可以表示处理所有异常

@ExceptionHandler(value = Exception.class)

此段代码表示当发生异常时记录异常信息和发生异常的url,将相关信息发送给模板error.html。在模板中显示相关内容

error.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <div th:text="${url}"></div>
  <div th:text="${exception.message}"></div>
</body>
</html>

任意编写测试数据

@RequestMapping("/testError")
public String testError() throws Exception{
    System.out.println(5/0);
    return us.getUUID();
}

测试,访问链接: http://localhost:8080/myproj1/testError
测试结果

测试结果

相关文章

  • EffectiveJava第9章-异常

    第57条:只针对异常的情况处理异常 用抛出(throw)、捕获(catch)、忽略ArrayIndexOutOfB...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • 08整合后高级配置-统一异常处理拦截器

    目标 统一异常处理 拦截器 第1节 统一异常处理 目的:有一些能识别出的异常,我们要对他进行分类。产生出我们的自定...

  • Java 异常

    异常处理机制 异常处理模型:终止模型:当异常发生时,就进入异常处理程序,处理结束并不返回异常发生位置继续执行;恢复...

  • 第十二章:异常处理

    异常处理语法格式: try: ...处理语句 except 异常类型: ...异常处理语句 pytho...

  • 第7章 异常处理

    7.1 程序的异常处理 7.1.1 异常处理的基本使用 7.1.2 异常处理的高级使用 7.2 断言 断言 ass...

  • 第6章:异常处理

    时间:2018-07-31 作者:魏文应 一、异常 在Java语言中,将程序执行中发生的不正常情况称为 “异常”...

  • 第9天,异常处理

    @(python)[笔记] 目录 一、错误和异常 程序中的错误分成两种 1.1 语法错误 这种错误,根本过不了Py...

  • 第017篇:异常处理

    1、什么是异常 程序在运行过程中报的错误就叫异常 当程序出现异常的时候程序会直接结束,不会继续执行后面的代码 常见...

  • 第10章 异常处理

    常规B/S结构网站的异常处理主要有两种方式 根据HTTP协议码 根据异常类型 SpringBoot中关于两种方式异...

网友评论

      本文标题:第10章 异常处理

      本文链接:https://www.haomeiwen.com/subject/grvidqtx.html