SpringMVC框架四:异常处理器

时间:2022-11-10 13:24:47

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

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学习&lpar;八&rpar;——SpringMVC中的异常处理器

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

  3. 基于SpringMVC的全局异常处理器介绍&lpar;转&rpar;

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

  4. SpringMVC实现全局异常处理器 &lpar;转&rpar;

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

  5. SpringMVC由浅入深day02&lowbar;5数据回显&lowbar;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. 七 异常处理的两种方式&lpar;创建全局异常处理器&amp&semi;自定义异常&rpar;

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

随机推荐

  1. Static Constructors

    A static constructor is used to initialize any static data, or to perform a particular action that n ...

  2. Ajax and JSON

    Ajax (核心是XMLHttpRequest对象) 1.XMLHttpRequest对象: request=new XMLHttpRequest()  支持Firefox opera Safari  ...

  3. Flux工作流

    Flux工作流 模型层(M)和控制层(C) Flux 只是这个模式的一个例子. 很多代码和一堆重复的模板 在其他JavaScript环境中实现重用. 强大又容易配置的模块化打包工具Webpack来简化 ...

  4. Rectangle 响应按键

    import QtQuick 2.4 import QtQuick.Window 2.2 Window { visible: true MainForm { anchors.fill: parent ...

  5. 利用iptables实现基于端口的网络流量统计

    如何统计某个应用的网络流量(包括网络流入量和网络流出量)问题,可以转换成如何基于端口号进行网络流量统计的问题.大部分网络应用程序都是传输层及以上的协议,因此基于端口号(tcp, udp)统计网络流量基 ...

  6. MySQL的JOIN(三):JOIN优化实践之内循环的次数

    这篇博文讲述如何优化内循环的次数.内循环的次数受驱动表的记录数所影响,驱动表记录数越多,内循环就越多,连接效率就越低下,所以尽量用小表驱动大表.先插入测试数据. CREATE TABLE t1 ( i ...

  7. java 8中抽象类与接口的异同

    1.java 8中抽象类与接口的异同 相同点: 1)都是抽象类型: 2)都可以有实现方法(以前接口不行): 3)都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实 ...

  8. vue表单校验提交报错TypeError&colon; Cannot read property &&num;39&semi;validate&&num;39&semi; of undefined

    TypeError: Cannot read property 'validate' of undefined at VueComponent.submitForm (plat_users.html: ...

  9. netty源码理解(三) 从channel读取数据

    下面的是ServerBootstrap 的内部类 ServerBootstrapAcceptor extends ChannelInboundHandlerAdapter 的方法 这里其实卡住了我很长 ...

  10. 一种基于SDR实现的被动GSM嗅探

    软件定义无线电(SDR)是一种无线电通信系统,简单来说,就是通过数字信号处理技术在通用可编程数字信号处理硬件平台上,利用软件定义来实现无线电台的各单元功能,从而对无线电信号进行调制.解调.测量.SDR ...