.异常分为:预期异常、运行时异常

dao、service、controller三层中有异常,依次向上抛出直到SpringMVC处理。

而SpringMVC交给HandlerExceptionResolver(异常处理器)

程序员则需要实现这个类

示例:

package org.dreamtech.springmvc.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; /**
*
* @author YiQing
*
* 异常处理器自定义实现类
*/
public class CustomExceptionResolver implements HandlerExceptionResolver { @Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
Exception e) { /*
* request 请求 response 响应
* obj 字符串,发生异常的地方(包名.类名.方法名)
* e 异常
*/ ModelAndView mav = new ModelAndView();
mav.addObject("error","异常");
mav.setViewName("error"); return mav;
} }

使用前记得配给SpringMVC:

    <!-- springMVC异常处理器 -->
<bean class="org.dreamtech.springmvc.exception.CustomExceptionResolver" />

解释:如果程序中出现了异常,就会执行这个方法,并且返回error视图

使用场景:开发网站时候,用户由于不当操作使程序异常,会看到Tomcat报错,这大大影响用户体验,可以统一设置一个错误页面,友好提示

上边这种方式异常不在意料之中,而如果我们需要主动抛出异常的话(预期异常):

使用场景:用户注册时候,用户名密码不能为空(如果不采取前端校验),这时候可以在后端主动抛出异常,并返回对应提示信息

首先自定义异常:

package org.dreamtech.springmvc.exception;
/**
* 自定义异常
* @author YiQing
*
*/
public class MessageException extends Exception { private String msg; public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public MessageException(String msg) {
super();
this.msg = msg;
}
}

主动触发异常:

        if(username==""){
throw new MessageException("用户名不为空");
}

这时候异常处理器就可以修改成完整版:

package org.dreamtech.springmvc.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; /**
*
* @author YiQing
*
*/
public class CustomExceptionResolver implements HandlerExceptionResolver { @Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
Exception e) { ModelAndView mav = new ModelAndView(); if (e instanceof MessageException) {
MessageException me = (MessageException) e;
mav.addObject("error", me.getMsg());
mav.setViewName("login");
} else {
mav.addObject("error", "未知异常");
mav.setViewName("error");
} return mav;
} }

SpringMVC框架四:异常处理器的更多相关文章

  1. 关于SpringMVC的全局异常处理器

    近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...

  2. (转)SpringMVC学习(八)——SpringMVC中的异常处理器

    http://blog.csdn.net/yerenyuan_pku/article/details/72511891 SpringMVC在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常 ...

  3. 基于SpringMVC的全局异常处理器介绍(转)

    近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...

  4. SpringMVC实现全局异常处理器 (转)

    出处:  SpringMVC实现全局异常处理器 我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手 ...

  5. SpringMVC由浅入深day02_5数据回显_6异常处理器

    5 数据回显 5.1 什么数据回显 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 5.2 pojo数据回显方法 1.springmvc默认对pojo数据进行回显. po ...

  6. springmvc中拦截器与springmvc全局异常处理器的问题

    最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...

  7. Spring Boot 中全局异常处理器

    Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ...

  8. SSM之全局异常处理器

    1. 异常处理思路 首先来看一下在springmvc中,异常处理的思路:   如上图所示,系统的dao.service.controller出现异常都通过throws Exception向上抛出,最后 ...

  9. 七 异常处理的两种方式(创建全局异常处理器&自定义异常)

    1 创建全局异常处理器 实现HandlerExceptionResolve接口 package com.springmvc01; import javax.servlet.http.HttpServl ...

随机推荐

  1. 转 Java操作PDF之iText详细入门

    转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...

  2. vuex状态管理

    msvue组件间通信时,若需要改变多组件间共用状态的值.通过简单的组件间传值就会遇到问题.如:子组件只能接收但改变不了父组件的值.由此,vuex的出现就是用作各组件间的状态管理. 简单实例:vuex的 ...

  3. 基于SoftRoCE 了解RDMA

    RDMA是基于IB技术的内存直接传送,无需内核参与,硬件网卡搞定.IB需要HPC领域的专用硬件,ROCE则是RDMA协议在普通以太网卡的实现,RoCEv1是在MAC上的二层封装,局域网内可以,要通过路 ...

  4. Similarity measure

    1. https://blog.csdn.net/m0_37676632/article/details/68936157 2. https://www.cnblogs.com/pinard/p/62 ...

  5. 1,charles的功能能介绍和安装破解

    1,charles的功能 1,截取http和https网络包 2,支持重发网络请求,方便后端调试 3,支持网络请求的截获和动态修改 4,支持模拟弱化的网络 2,安装和破解 1,进入官网下载地址:htt ...

  6. C#获取文件夹下面的所有文件名

    String path = @"X:\xxx\xxx";   //第一种方法 var files = Directory.GetFiles(path, "*.txt&qu ...

  7. 浏览器中的 JS 和 Node.js 中的 JS

    一个是前端技术,一个是后端技术 浏览器中的 JavaScript ECMAScript  语言基础,如语法.数据类型结构.一些内置对象 BOM(Browser Object Model)  一些操作页 ...

  8. Linux 安装源码软件

    linux下,源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install) 过程中用到configure --prefix  --with:其中--pr ...

  9. Fair Candy Swap LT888

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  10. 关于TypeError: strptime() argument 1 must be str, not bytes解析

    关于TypeError: strptime() argument 1 must be str, not bytes解析   在使用datetime.strptime(s,fmt)来输出结果日期结果时, ...