springMVC--异常处理

这篇具有很好参考价值的文章主要介绍了springMVC--异常处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

springMVC–异常处理

基本介绍

  1. Spring MVC 通过HandlerExceptionResolver 处理程序的异常,包括Handler 映射、数据绑定以及目标方法执行时发生的异常。
  2. 主要处理Handler 中用@ExceptionHandler 注解定义的方法。
  3. ExceptionHandlerMethodResolver 内部若找不到@ExceptionHandler 注解的话, 会找@ControllerAdvice 类的@ExceptionHandler 注解方法, 这样就相当于一个全局异常处理器。

局部异常

应用实例

演示局部异常处理机制

如果不处理异常, 对用户非常的不友好。
springMVC--异常处理,springMVC,spring,mvc,笔记

代码实现

创建springmvc\src\com\web\exception\MyExceptionHandler.java

@Controller
public class MyExceptionHandler {
    /**
     * 1. localException 方法处理局部异常
     * 2. 这里处理ArithmeticException.class,NullPointerException.class类型的异常
     * 3. Exception ex: 生成的异常对象,会传递给ex, 通过ex可以得到相关的异常信息,这里程序员可以加入自己的业务逻辑
     */
    @ExceptionHandler({ArithmeticException.class,NullPointerException.class})
    public String localException(Exception ex, HttpServletRequest request){
        System.out.println("局部异常信息是-" + ex.getMessage());
        //如何将异常的信息带到下一个页面.
        request.setAttribute("reason", ex.getMessage());
        return "exception_mes";
    }

    /**
     * 1. 编写方法,模拟异常, 算术异常
     * 2. 如果我们不做异常处理,是由tomcat默认页面显示
     */
    @RequestMapping(value = "/testException01")
    public String test01(Integer num) {
        int i = 9 / num;
        return "success";
    }
}

创建springmvc\web\exception.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
    <title>异常信息</title>
    </head>
    <body>
        <h1>测试异常</h1>
        <a href="testException01?num=0">点击测试异常</a><br><br>
    </body>
</html>

创建显示异常信息页面/WEB-INF/pages/exception_mes.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>异常信息提示</title>
</head>
<body>
<h1>朋友, 程序发生了异常...</h1>
异常信息- ${requestScope.reason}
</body>
</html>
测试(页面方式)

浏览器输入http://localhost:8080/springmvc/exception.jsp

springMVC--异常处理,springMVC,spring,mvc,笔记

springMVC--异常处理,springMVC,spring,mvc,笔记

感兴趣的可以debug一下源码。

springMVC--异常处理,springMVC,spring,mvc,笔记

全局异常

应用实例

应用实例需求

演示全局异常处理机制, ExceptionHandlerMethodResolver 内部若找不到@ExceptionHandler 注解的话,会找@ControllerAdvice 类的@ExceptionHandler 注解方法,这样就相当于一个全局异常处理器。

代码实现

创建springmvc\src\com\web\exception\MyGlobalException.java

// 如果类上标注了@ControllerAdvice,就是一个全局异常处理类
@ControllerAdvice
public class MyGlobalException {
    /**
     * 1. 全局异常就不管是哪个Handler抛出的异常,都可以捕获 , @ExceptionHandler({异常类型})
     * 2. 这里处理的全局异常是NumberFormatException.class,ClassCastException.class
     * 3. Exception ex 接收抛出的异常对象
     */
    @ExceptionHandler({NumberFormatException.class, ClassCastException.class})
    public String globalException(Exception ex, HttpServletRequest request) {
        System.out.println("全局异常处理-" + ex.getMessage());
        //如何将异常的信息带到下一个页面.
        request.setAttribute("reason", ex.getMessage());
        return "exception_mes";
    }
}

修改MyExceptionHandler.java , 增加方法

    @RequestMapping(value = "/testGlobalException")
    public String global(){
        //1. 这里我们模拟了一个异常 NumberFormatException
        //2. 该异常没有在局部异常处理,按照异常处理机制,就会交给全局异常处理类处理
        int num = Integer.parseInt("hello");
        return "success";
    }

修改exception.jsp

<a href="testException01?num=0">点击测试异常</a><br><br>
<a href="testGlobalException">点击测试全局异常</a><br><br>
完成测试(页面方式)

浏览器输入http://localhost:8080/springmvc/exception.jsp

springMVC--异常处理,springMVC,spring,mvc,笔记
springMVC--异常处理,springMVC,spring,mvc,笔记

自定义异常

应用实例

应用实例需求

通过@ResponseStatus 注解, 可以自定义异常的说明。

应用实例-代码实现

创建springmvc\src\com\web\exception\AgeException.java

@ResponseStatus(reason="年龄需要在1-120 之间",value= HttpStatus.BAD_REQUEST)
public class AgeException extends RuntimeException{
}

修改MyExceptionHandler.java, 增加方法

//抛出自定义异常
@RequestMapping(value="/testException02")
public String test02(){
throw new AgeException();
}

修改exception.jsp, 增加超链接

<a href="testGlobalException">点击测试全局异常</a><br><br>
<a href="testException02">点击测试自定义异常</a><br/><br/>
完成测试

浏览器输入http://localhost:8080/springmvc/exception.jsp

springMVC--异常处理,springMVC,spring,mvc,笔记
springMVC--异常处理,springMVC,spring,mvc,笔记

全局异常处理—SimpleMappingExceptionResolver

基本说明

  1. 如果希望对所有异常进行统一处理,可以使用SimpleMappingExceptionResolver。
  2. 它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常。
  3. 需要在ioc 容器中配置。

应用实例

需求

对数组越界异常进行统一处理,使用SimpleMappingExceptionResolver.

代码实现
  1. 修改MyExceptionHandler.java , 增加方法test03
//统一的异常
@RequestMapping(value="/testException03")
public String test03(){
    int[] arr = new int[]{3,9,10,190};
    System.out.println(arr[90]);
    return "success";
}
  1. 配置springDispatcherServlet-servlet.xml
 <!--配置统一处理异常Bean-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.ArrayIndexOutOfBoundsException">arrEx</prop>
            </props>
        </property>
    </bean>
<!-- 加入两个常规配置-->
<!-- 能支持SpringMVC 高级功能,比如JSR303 校验,映射动态请求-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 将SpringMVC 不能处理的请求交给Tomcat, 比如请求css,js 等-->
<mvc:default-servlet-handler/>

创建/WEB-INF/pages/arrEx.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
    	<title>数组越界了</title>
    </head>
    <body>
    	<h1>数组越界了~</h1>
    </body>
</html>
  1. 修改exception.jsp
<a href="testException03">
测试统一的异常[SimpleMappingExceptionResolver]</a>
完成测试(页面测试)

浏览器输入http://localhost:8080/springmvc/exception.jsp

springMVC--异常处理,springMVC,spring,mvc,笔记
springMVC--异常处理,springMVC,spring,mvc,笔记

对未知异常进行统一处理

需求

对未知异常进行统一处理,使用SimpleMappingExceptionResolver。

代码实现
  1. 修改MyExceptionHandler.java , 增加方法test04
//如果发生了没有归类的异常, 可以给出统一提示页面
@RequestMapping(value="/testException04")
public String test04(){
    String str = "hello";
    char c = str.charAt(10);
    return "success";
}
  1. 配置springDispatcherServlet-servlet.xml
<!--配置统一处理异常Bean-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.ArrayIndexOutOfBoundsException">arrEx</prop>
                <prop key="java.lang.Exception">allEx</prop>
            </props>
        </property>
    </bean>
  1. 创建/WEB-INF/pages/otherEx.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
    	<title>未知异常信息</title>
    </head>
    <body>
    	<h1>朋友,系统发生了未知异常~</h1>
    </body>
</html>
  1. 修改exception.jsp , 增加超链接
<a href="testException03">
	测试统一的异常[SimpleMappingExceptionResolver]</a>
<br/><br/><a href="testException04"> 统一未归类异常</a>
完成测试(页面测试)

浏览器输入http://localhost:8080/springmvc/exception.jsp

springMVC--异常处理,springMVC,spring,mvc,笔记
springMVC--异常处理,springMVC,spring,mvc,笔记

小结

异常处理的优先级

局部异常> 全局异常> SimpleMappingExceptionResolver > tomcat 默认机制。文章来源地址https://www.toymoban.com/news/detail-609055.html

到了这里,关于springMVC--异常处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [第二章—Spring MVC的高级技术] 2.3 处理异常

    各位小猿,程序员小猿开发笔记,希望大家共同进步。 引言 我是谁——异常处理。 来自那——所有功能正常运行,但出现错误 怎么办——如何处理异常和响应客户端 我是谁——Spring框架中的一个注解 用在哪——应用在控制器类或方法上 什么用——用于在控制器方法中指定

    2024年01月22日
    浏览(48)
  • 解密Spring MVC异常处理:从局部到全局,打造稳固系统的关键步骤

    😀前言 在现代软件开发中,异常处理是不可或缺的一部分,它能够有效地提高系统的稳定性和健壮性。在Spring MVC框架中,异常处理机制起着至关重要的作用,它允许开发者在程序运行过程中捕获、处理和报告异常,从而保障用户体验和系统可靠性。本文将带您深入探索Spr

    2024年02月10日
    浏览(43)
  • Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

    学习视频:【编程不良人】继spring之后快速入门springmvc,面对SpringMVC不用慌 引入相关依赖 开发控制器 日期格式修正 可以正常响应 拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处

    2024年02月05日
    浏览(48)
  • Spring Mvc:初识SpringMvc

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 SpringMvc版本:5.3.1 ①SpringMVC是Spring的一种 子框架 ,它是Spring为【 展现层 | 表示层 | 表述层 | 控制层 】提供的 基于MVC设计理念 的优秀的Web框架,是目前最主流的MVC框架。

    2024年02月13日
    浏览(52)
  • Spring MVC 之MVC 体系结构、什么是SpringMVC

    三层架构 我们的开发架构⼀般都是基于两种形式,⼀种是 C/S 架构,也就是客户端/服务器;另⼀种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,⼏乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。 三层架构中,每

    2024年02月09日
    浏览(46)
  • SpringMVC之异常处理 SpringMVC之异常处理

    异常分为编译时异常和运行时异常,编译时异常我们trycatch捕获,捕获后自行处理,而运行时异常是不可预期的,就需要规范编码来避免,在SpringMVC中,不管是编译异常还是运行时异常,都可以最终由SpringMVC提供的异常处理器进行统一管理,这样就可以避免随时随地捕获异常

    2024年02月12日
    浏览(40)
  • 【SpringMVC】Spring Web MVC入门(一)

    前面我们了解了什么是Spring,那么今天我将为大家分享一种在日常网站开发中使用非常广泛的框架——Spring Web MVC。 先来看看官方解释。 Spring Web MVC是Spring Framework提供的Web组件,它是一个MVC设计模式的框架,主要用于开发灵活、松散耦合的Web应用程序。它提供了模型-视图-控

    2024年02月05日
    浏览(42)
  • 【SpringMVC】基于 Spring 的 Web 层MVC 框架

    🎄欢迎来到@边境矢梦°的csdn博文🎄 🎄本文主要梳理SpringMVC : 基于 Spring 的 Web 层MVC 框架 🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下 🫰🫰🫰 ,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大

    2024年02月08日
    浏览(39)
  • SpringMVC-2-Spring MVC拦截器详解:从入门到精通

    能够编写拦截器并配置拦截器 1.1 拦截器概念和作用 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 总结:增强 核心原理:AOP思想 1.2 拦截器和过滤器的区别

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包