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>
相关推荐
万少9 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站11 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德11 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆13 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
炫饭第一名13 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫14 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊14 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter14 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折14 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_14 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js