SpringMVC框架四:异常处理器
.异常分为:预期异常、运行时异常
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框架四:异常处理器的更多相关文章
- 关于SpringMVC的全局异常处理器
近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...
- (转)SpringMVC学习(八)——SpringMVC中的异常处理器
http://blog.csdn.net/yerenyuan_pku/article/details/72511891 SpringMVC在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常 ...
- 基于SpringMVC的全局异常处理器介绍(转)
近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...
- SpringMVC实现全局异常处理器 (转)
出处: SpringMVC实现全局异常处理器 我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手 ...
- SpringMVC由浅入深day02_5数据回显_6异常处理器
5 数据回显 5.1 什么数据回显 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 5.2 pojo数据回显方法 1.springmvc默认对pojo数据进行回显. po ...
- springmvc中拦截器与springmvc全局异常处理器的问题
最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...
- Spring Boot 中全局异常处理器
Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ...
- SSM之全局异常处理器
1. 异常处理思路 首先来看一下在springmvc中,异常处理的思路: 如上图所示,系统的dao.service.controller出现异常都通过throws Exception向上抛出,最后 ...
- 七 异常处理的两种方式(创建全局异常处理器&自定义异常)
1 创建全局异常处理器 实现HandlerExceptionResolve接口 package com.springmvc01; import javax.servlet.http.HttpServl ...
随机推荐
- Git命令参考手册
git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...
- java之数据库相关
这篇还是在回顾知识.主要是关于java连接Sqlserver2012数据库的一些方式记录,以便以后查询. 十一之内复习完这些知识就可以新学Hibernate啦(*^▽^*) 1.普通方式 注意,在连接 ...
- java之servlet学习基础(二)
上一次写到Servlet的实现方法,主要还是通过继承HttpServlet来实现Servlet.下面主要是回顾一下HttpServletRequest和HttpServletResponse对象中的一 ...
- spring事务相关
在 SPRING 中一共定义了六种事务传播属性 PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SUPPOR ...
- MySql共享锁和排它锁
共享锁和排他锁 1.共享锁: 读锁.X锁,在查询时生效,多个事务在查询同一个数据时共享一把锁,但是不能作用于修改数据,在select语句后添加 lock in share mode : 2.排他锁:在 ...
- join查询优化
更新使用过滤条件中包括自身的表 此方法不能无法在mysql中使用 `UPDATE user1 SET over='齐天大圣' WHERE user1.user_name IN ( SELECT b.u ...
- [总结]给pcDuino v2编译Linux kernel
1.版本问题 推荐选择pcdunio提供的官方的kernel. 当然可以选用www.github.com/linux-sunxi 中的kernel,不过有很多驱动都用不了包括arduino. 我尝试了 ...
- nohup 运行后台程序
写了个程序,大概就是日志文件快写满的时候自动删日记.然后 java -jar log_delete.jar & 跑起来.过两天ps发现程序没有了, 网上一查明白是因为:通过终端(shel ...
- bp代码
#电池老化率测定的神经网络模型 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import pa ...
- selenium批量执行脚本操作
import unittest import os from HTMLTestRunner import HTMLTestRunner # 待执行用例的目录 def allcase(): #引入执行用 ...