SpringMVC的异常处理(超详细)

简介: SpringMVC的异常处理(超详细)

异常处理思路


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

1.png


异常处理


先看下项目的目录结构

2.png


演示程序异常


index.jsp:


<%--
  Created by IntelliJ IDEA.
  User: Keafmd
  Date: 2021/2/6
  Time: 10:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>异常处理</h1>
    <a href="user/testException">testException</a>
</body>
</html>

UserController类:


package com.keafmd.controller;
import com.keafmd.exception.SysException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.sql.SQLOutput;
/**
 * Keafmd
 *
 * @ClassName: UserController
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-02-06 10:14
 */
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("testException")
    public String testException() throws Exception{
        System.out.println("testException执行了。。。");
        //模拟异常
        int a = 10/0;
        return "success";
    }
}

success.jsp:


<%--
  Created by IntelliJ IDEA.
  User: Keafmd
  Date: 2021/1/30
  Time: 15:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>执行成功</h1>
</body>
</html>

配置好tomcat后开始执行。


演示效果

3.png


点击testException后


4.png


这种显示非常不友好,我们需要处理下异常。


异常处理步骤


1、自定义异常类


SysException:


package com.keafmd.exception;
/**
 * Keafmd
 *
 * @ClassName: SysException
 * @Description: 自定义异常类
 * @author: 牛哄哄的柯南
 * @date: 2021-02-06 10:25
 */
public class SysException extends Exception{
    //存储提示信息
    private  String message;
    public SysException(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

2、自定义异常处理器


SysExceptionResolver:


package com.keafmd.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Keafmd
 *
 * @ClassName: SysExceptionResolver
 * @Description: 异常处理器
 * @author: 牛哄哄的柯南
 * @date: 2021-02-06 10:32
 */
public class SysExceptionResolver implements HandlerExceptionResolver {
    /**
     * 处理异常的业务逻辑
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param e
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        //准备获取到异常对象
        SysException se = null;
        if(e instanceof SysException){
            se = (SysException)e;
        }else{
            se = new SysException("系统正在维护,请联系管理员。。。");
        }
        //创建ModelAndView对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg",se.getMessage());
        mv.setViewName("error");
        return mv;
    }
}

error.jsp:


<%--
  Created by IntelliJ IDEA.
  User: Keafmd
  Date: 2021/2/6
  Time: 10:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${errorMsg}
</body>
</html>

3、配置异常处理器


在springmvc.xml里面进行配置:(添加如下配置信息)


<!--配置异常处理器对象-->
<bean id="sysExceptionResolver" class="com.keafmd.exception.SysExceptionResolver"/>

springmvc.xml:


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 开启注解扫描,配置spring创建容器时要扫描的包 -->
    <context:component-scan base-package="com.keafmd"></context:component-scan>
    <!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--告诉前端控制器,哪些静态资源,不拦截-->
    <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/images/" mapping="/images/**" />
    <mvc:resources location="/js/" mapping="/js/**" />
    <!-- 开启SpringMVC框架注解支持,注解配置spring开启注解mvc的支持 -->
    <mvc:annotation-driven/>
    <!--配置异常处理器对象-->
    <bean id="sysExceptionResolver" class="com.keafmd.exception.SysExceptionResolver"/>
</beans>

UserController类(包含异常处理):


package com.keafmd.controller;
import com.keafmd.exception.SysException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.sql.SQLOutput;
/**
 * Keafmd
 *
 * @ClassName: UserController
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-02-06 10:14
 */
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("testException")
    public String testException() throws Exception{
        System.out.println("testException执行了。。。");
        try {
            //模拟异常
            int a = 10/0;
        } catch (Exception e) {
            //控制台打印异常信息
            e.printStackTrace();
            //抛出自定义异常信息
            throw new SysException("查询所有用户出现错误了。。");
        }
        return "success";
    }
}

异常处理效果演示


运行效果:


1.png

点击testException后,显示我们自定义的异常信息。

2.png



以上就是SpringMVC的异常处理的全部内容。


相关文章
|
1月前
|
缓存 前端开发 Java
Spring MVC 面试题及答案整理,最新面试题
Spring MVC 面试题及答案整理,最新面试题
90 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
10 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
9 0
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
12 0
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
12 0
|
1月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
26 0
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
42 1
|
15天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
15天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
15天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
31 3