springmvc异常处理

本文详细介绍了Java中web容器及SpringMVC框架如何处理异常。包括通过web.xml配置错误页面、利用JSP页面处理异常,以及SpringMVC中使用@ExceptionHandler注解和自定义异常处理类实现异常管理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

java的异常处理类是一个很好的学习模板,通过web容器、springmvc的异常处理,可以帮助我们很好的回顾交互逻辑,理清楚springmvc控制层(controller)与页面(client)的逻辑交互关系。

一、容器是怎么处理异常的?

(1)、在web.xml中配置error-page,在eclipse的下面有提示信息,根据配置可以处理异常,在异常发生时跳转到我们设置的异常页面

配置信息如下:

<error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/pages/errors/notfoundexception.jsp</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.NullPointerException</exception-type>
        <location>/WEB-INF/pages/errors/nullpointerexception.jsp</location>
    </error-page>

(2)、在对应的jsp文件抬头信息设置 isErrorPage=”true”

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

(3)、在jsp页面可以通过四大域中的pageContext域的ErrorData属性获取绑定的异常信息,以下为el表达式获取信息:

<h2>请求资源路径:${pageContext.errorData.requestURI}</h2>
<h2>异常Servlet:${pageContext.errorData.servletName }</h2>
<h2>状态码:${pageContext.errorData.statusCode }</h2>

二、springmvc是怎么处理异常的?

1、使用@ExceptionHandler注解配置处理

(1)开启注解驱动:

<mvc:annotation-driven></mvc:annotation-driven>

(2)在出现异常的controller类中编写异常处理的方法,在方法中配置@ExceptionHandler注解


    @ExceptionHandler({Exception.class})//注册注解,指定传入的异常类型参数
    public String dealExcepiton(HttpServletRequest request,Exception e){
        request.setAttribute("e", e);//设置request对象,方便传送给到客户端
        return "/errors/exceptionhandler";//跳转到异常处理页面
    }

(3)在方法返回的客户端,通过上面方法中设定的request属性获取异常信息,从而显示在客户页面:

<h2>系统出现了非预期的异常,请联系系统管理员确认处理...</h2>
    <%
        Exception e = (Exception)request.getAttribute("e");
        out.println(e.getMessage());
        out.println(e.getClass());
        out.println(e.getCause());
    %>

注意: 如果存在多个@ExceptionHandler注解的方法,则进入离异常类型最近的方法,先进入小异常的处理。
总结:这种捕获异常的方式可以针对本类中每个方法可能出现的异常进行单独捕获 ,但是对于我们的代码有侵入性

2、自定义异常处理类实现HandlerExceptionResolver接口

(1)、自定义类来处理异常实现HandlerExceptionresolver接口

public class MyExceptionHandler implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object arg2, Exception e) {
        ModelAndView modelAndView = new ModelAndView();


        return modelAndView;
    }
}

(2)、配置该类到spring容器,通过注解方式,并实现异常逻辑:

@Controller
public class MyExceptionHandler implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object arg2, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("e", e);
        modelAndView.setViewName("/errors/notfoundexception");//文件路径已**视图解析器**通过InternalResourceViewResolver的配置前缀,后缀

        return modelAndView;
    }
}

(3)在上面跳转的jsp页面中,可以在request中获取异常信息:

 <%
        Exception e = (Exception)request.getAttribute("e");
        out.println(e.getMessage());
        out.println(e.getClass());
    %>  

也可以使用pageContext的errorData获取异常信息:

<h2>请求地址: ${pageContext.errorData.requestURI} </h2>
<h2> 状态码 : ${pageContext.errorData.statusCode} </h2>
<h2>异常 : ${pageContext.errorData.throwable} </h2>
<h2>servlet名称 :${pageContext.errorData.servletName} </h2>

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值