SpringMVC——异常

1. 异常处理思路

Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。

2. SpringMVC的异常处理

controller代码

java 复制代码
@Controller
@RequestMapping("/role")
public class RoleController {
    /**
     * 自己处理异常
     * @return
​
    @RequestMapping("/findAll.do")
    public String findAll(){
​
        try {
            System.out.println("执行了...");
            // 模拟异常
            int a = 10/0;
        } catch (Exception e) {
            e.printStackTrace();
            // 跳转到友好提示页面
        }
​
        return "suc";
    }
     */
​
    /**
     * 使用异常处理器方式
     * @return
     */
    @RequestMapping("/findAll.do")
    public String findAll(){
        System.out.println("执行了...");
        // 模拟异常
        int a = 10/0;
        return "suc";
    }
}

自定义异常类

java 复制代码
public class SysException extends Exception{
    // 提示消息
    private String message;
​
    @Override
    public String getMessage() {
        return message;
    }
​
    public void setMessage(String message) {
        this.message = message;
    }
​
    public SysException(String message) {
        this.message = message;
    }
}

自定义异常处理器

java 复制代码
public class SysExceptionResolver implements HandlerExceptionResolver {
    /**
     * 程序出现了异常,调用异常处理器中的方法
     * @param o
     * @param e
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {
        // 在控制台打印异常的信息
        e.printStackTrace();
        // 做强转
        SysException exception = null;
        // 判断
        if(e instanceof SysException){
            exception = (SysException)e;
        }else{
            exception = new SysException("系统正在维护,请联系管理员");
        }
​
        // 存入异常提示信息
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg",e.getMessage());
        // 设置跳转的页面
        mv.setViewName("error");
        return mv;
    }
}

配置异常处理器

XML 复制代码
 
<bean id="sysExceptionResolver" class="com.qcbyjy.demo3.SysExceptionResolver" />

jsp代码

html 复制代码
 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>错误提示页面</title>
</head>
<body>
​
    <!-- 异常测试 -->
    <h3>异常测试(会跳到 error.jsp)</h3>

    <a href="${pageContext.request.contextPath}/role/findAll.do">模拟除 0 异常</a>
​
​
</body>
</html>
相关推荐
是上好佳佳佳呀2 分钟前
【前端(十二)】JavaScript 函数与对象笔记
前端·javascript·笔记
longxibo4 分钟前
【Flowable 7.2 源码深度解析与实战】
java·后端·流程图
norq juox4 分钟前
Spring 中集成Hibernate
java·spring·hibernate
咸鱼2.012 分钟前
【java入门到放弃】Zookeeper
java·zookeeper
雨辰AI13 分钟前
从 MySQL 迁移至人大金仓 V9 完整改造指南|分页 / 函数 / 语法兼容全部解决
java·开发语言·数据库·后端·mysql·政务
你真的快乐吗17 分钟前
@fuxishi/svg-icon:一个 Vue 3 svg本地图标+iconify图标组件库,让图标管理不再头疼
前端·vue.js·typescript
阿维的博客日记20 分钟前
介绍一下Redisson的看门狗机制
java·redis·缓存
Rkgua23 分钟前
ESModule和Commonjs模块的区别
前端·javascript
江南十四行23 分钟前
ReAct Agent 基本理论与项目实战(二)
前端·react.js·前端框架
大G的笔记本27 分钟前
为什么接口中的变量默认是 public static final(常量)
java