springmvc异常处理

混江龙づ霸主 提交于 2020-02-16 21:22:39

在异常处理时,如果没有加异常处理器则会在页面提示出错误信息,这样对用户不友好。所以需要加上异常处理器,需要编写一个异常处理类实现Handler-ExceptionResolver接口。这样再出现错误时前端控制器就会调用异常处理方法来处理异常,并转移到友好页面。

1、没加异常处理器

1.1 index.jsp内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h3>异常处理</h3>
<a href="user/testException01">异常处理(没有加异常处理器)</a>
<%--<a href="user/testException02">异常处理(加了异常处理器)</a>--%>
</body>
</html>

1.2 controller层

@Controller
@RequestMapping("/user")
public class UserController {

    
    /**
     * 模拟异常(没加异常处理器),异常直接向上抛,
     * 由于没有异常处理器最终异常会抛给页面,造成
     * 用户不友好的感官体验。
     */
    @RequestMapping("/testException01")
    public String testException01() throws Exception{
        System.out.printf("testException执行了");
        int i=10/0;
        //由于没有捕获异常所以不能返回“success”,也就无法跳转到success.jsp页面。
        return "success";
    }

1.3 页面显示效果

可以看到异常直接在页面显示。
在这里插入图片描述

2、加了异常处理器

2.0 在springmvc.xml中配置异常处理器bean

 <bean id="sysExceptionResolver" class="cn.itcast.controller.SysExceptionResolver"></bean>

2.1 index.jsp内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<body>
<h3>异常处理</h3>


<%--<a href="user/testException01">异常处理(没有加异常处理器)</a>--%>


<a href="user/testException02">异常处理(加了异常处理器)</a>

</body>
</html>

2.2 controller层

@Controller
@RequestMapping("/user")
public class UserController {

//
//    /**
//     * 模拟异常(没加异常处理器),异常直接向上抛,
//     * 由于没有异常处理器最终异常会抛给页面,造成
//     * 用户不友好的感官体验。
//     */
//    @RequestMapping("/testException01")
//    public String testException01() throws Exception{
//        System.out.printf("testException执行了");
//        int i=10/0;
//        return "success";
//    }


    /**
     * 模拟异常(加了异常处理器)
     */
    @RequestMapping("/testException02")
    public String testException02() throws SysException{
        System.out.printf("testException执行了");
        try {
            //模拟异常
            int i=10/0;
        } catch (Exception e) {
            //打印异常信息
            throw new SysException("查询所有用户出现错误");
        }
        return "success";
    }

}

2.3 抛出新异常SysException(提示信息用)。

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;
    }
}

2.4 编写异常处理类

 */
public class SysExceptionResolver implements HandlerExceptionResolver {
    /**
     * 处理异常业务逻辑
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

        SysException e=null;
        if (ex instanceof SysException)
            e=(SysException) ex;
        else
            e=new SysException("系统正在维护......");
        ModelAndView mv=new ModelAndView();
        mv.addObject("errorMsg",e.getMessage());

        mv.setViewName("error");
        //正确跳转到error.jsp
        return mv;
    }
}

2.5 页面效果

在这里插入图片描述

3 异常处理器具体步骤示意图

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!