异常处理,对于项目开发至关重要,总不能用户点击一个页面出错了,直接报500,那样用户体验多不好啊!

所以这里讲的是SpringMVC对异常的处理,希望能给大家带来一定的 帮助和启发。

一、编写实体

package com.tutorialspoint;
public class Student {private Integer age;private String name;private Integer id;public void setAge(Integer age) {this.age = age;}public Integer getAge() {return age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setId(Integer id) {this.id = id;}public Integer getId() {return id;}
}

二、编写异常

package com.tutorialspoint;
public class SpringException extends RuntimeException{private String exceptionMsg;   public SpringException(String exceptionMsg) {this.exceptionMsg = exceptionMsg;}   public String getExceptionMsg(){return this.exceptionMsg;}   public void setExceptionMsg(String exceptionMsg) {this.exceptionMsg = exceptionMsg;}
}

三、编写Controller

package com.tutorialspoint;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.ui.ModelMap;
@Controller
public class StudentController {@RequestMapping(value = "/student", method = RequestMethod.GET)public ModelAndView student() {return new ModelAndView("student", "command", new Student());}@RequestMapping(value = "/addStudent", method = RequestMethod.POST)@ExceptionHandler({SpringException.class})public String addStudent( @ModelAttribute("HelloWeb")Student student, ModelMap model) {if(student.getName().length() < 5 ){throw new SpringException("Given name is too short");}else{model.addAttribute("name", student.getName());}     if( student.getAge() < 10 ){throw new SpringException("Given age is too low");}else{model.addAttribute("age", student.getAge());}model.addAttribute("id", student.getId());return "result";}
}

四、修改web.xml

<web-app id="WebApp_ID" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Spring Exception Handling</display-name><servlet><servlet-name>HelloWeb</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>HelloWeb</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

五、添加HelloWeb-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="
   http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:component-scan base-package="com.tutorialspoint" /><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" />
</bean><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="exceptionMappings"><props><prop key="com.tutorialspoint.SpringException">ExceptionPage</prop></props></property><property name="defaultErrorView" value="error"/>
</bean></beans>

六、编写相应的jsp

student.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head><title>Spring MVC Exception Handling</title>
</head>
<body><h2>Student Information</h2>
<form:form method="POST" action="/HelloWeb/addStudent"><table><tr><td><form:label path="name">Name</form:label></td><td><form:input path="name" /></td></tr><tr><td><form:label path="age">Age</form:label></td><td><form:input path="age" /></td></tr><tr><td><form:label path="id">id</form:label></td><td><form:input path="id" /></td></tr><tr><td colspan="2"><input type="submit" value="Submit"/></td></tr></table>
</form:form>
</body>
</html>

error.jsp

<html>
<head><title>Spring Error Page</title>
</head>
<body><p>An error occured, please contact webmaster.</p></body>
</html>

ExceptionPage.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head><title>Spring MVC Exception Handling</title>
</head>
<body><h2>Spring MVC Exception Handling</h2><h3>${exception.exceptionMsg}</h3></body>
</html>

result.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head><title>Spring MVC Form Handling</title>
</head>
<body><h2>Submitted Student Information</h2><table><tr><td>Name</td><td>${name}</td></tr><tr><td>Age</td><td>${age}</td></tr><tr><td>ID</td><td>${id}</td></tr></table>
</body>
</html>

七、运行项目

出现如图所示,表示成功

在SpringMVC中有两种处理异常的方式,那么就存在一个优先级的问题:

当发生异常的时候,SpringMVC会如下处理:

(1)SpringMVC会先从配置文件找异常解析器HandlerExceptionResolver

(2)如果找到了异常异常解析器,那么接下来就会判断该异常解析器能否处理当前发生的异常

(3)如果可以处理的话,那么就进行处理,然后给前台返回对应的异常视图

(4)如果没有找到对应的异常解析器或者是找到的异常解析器不能处理当前的异常的时候,就看当前的Controller中有没有提供对应的异常处理器,如果提供了就由Controller自己进行处理并返回对应的视图

(5)如果配置文件里面没有定义对应的异常解析器,而当前Controller中也没有定义的话,那么该异常就会被抛出来。

Spring(十九)之异常处理相关推荐

  1. 二十九、Java的异常处理

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  2. Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四

    Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四 MetricsHttpAgent的httpGet ServerHttpAgent的httpGet HttpSimple ...

  3. 微服务接入oauth2_SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法)...

    SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法) 一.概述 在<SpringCloud微服务实战系列(十七)Ouath2在真实场景中的应用之资 ...

  4. Python编程基础:第二十九节 异常Exception

    第二十九节 异常Exception 前言 实践 前言 我们在写代码时不可避免地会出错,这时候编译器便会抛出异常并中断程序的执行.针对这种情况,我们可以采用异常处理的方式捕捉程序中的异常信息,并将异常信 ...

  5. javaweb学习总结(三十九)——数据库连接池

    javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...

  6. 十九. Python基础(19)--异常

    十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <...............&g ...

  7. springboot 第十九节 starter and muti_datasource 多数据源

    springboot 第十九节 starter and muti_datasource 多数据源 1. spring.datasource.spring.driverClassName=com.mys ...

  8. C#之 十九 使用WinForm控件

    十九 使用Win Form控件 比如说电脑有显示器,鼠标,主机以及键盘的基本元素组成.在windows窗体中也有其基本控件,这些控件在每一个窗体中都要用到,也就是说无所不在.有些控件可能外观不同但是他 ...

  9. [笔记]Windows核心编程《十九》DLL基础

    系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...

最新文章

  1. PHP中spl_autoload_register函数的用法
  2. ASA IPSEC ***配置
  3. lombok构造方法_最佳实践Lombok
  4. 设计模式学习每天一个——Adapter模式
  5. 双系统重装Ubuntu经验分享
  6. chrome官网下载离线安装包
  7. SAP SD销售订单保存提示 定价错误: 必要条件 MWSI 丢失解决方法
  8. 水泥行业超低排放政策频发,企业如何完成超低排放改造?
  9. matlab批量读取图像图片并批量处理图像(以伽马校正为例)以及批量保存图像
  10. Android动态底部导航
  11. pandas计算方差,平均值,分位数,中位数
  12. 程序员如何自我认知 自我了解
  13. Web入门----css中伪类
  14. CobaltStrike二次开发环境准备以及免杀
  15. Selenium(二)_控件定位及简单操作
  16. (私人收藏)红色项目工作计划总结汇报PPT模板
  17. 飞秋FeiQ, 只能接收无法发送文件
  18. 论文笔记(十四):PoseRBPF: A Rao–Blackwellized Particle Filter for 6-D Object Pose Tracking
  19. 基于物联网(IOT)技术的智慧楼宇运营管理平台介绍
  20. 阿里巴巴集团技术委员会主席王坚:我曾经被诺贝尔奖得主司马贺忽悠_相信人工智能就是未来!...

热门文章

  1. 【入门篇】接口自动化测试
  2. blender怎么移动骨骼_宝宝偏头怎么办?千万别错过这个矫正“黄金期”!
  3. 配置JAVA和配置Android -sdk步骤
  4. python post 表单类数据_python post content-type:multipart/form-data 类型的表单数据
  5. Android状态栏语言,Android实现3种Notification(状态栏通知)
  6. 面试问题记录1:IP子网规划
  7. 2FSK频谱matlab,2FSK信号的频谱分析及解调的实现.doc
  8. 暴涨2000+? 2021年软件测试平均薪资出来了,我坐不住了
  9. 程序老鸟:软件测试的工资高还是开发者工资高?
  10. mysql双主启停_Mysql 多实例配置与启停