spring MVC 异常处理整理

一、异常结构

1.异常由外到内如下:

web服务器处理异常--->web应用里面web.xml处理异常--->Spring框架处理异常---->控制器注释处理异常
--->控制器方法里面try处理异常

二、针对如上图讲解实现方法

1.Tomcat异常处理:在conf/web.xml里面加入错误页面配置信息。(了解)

2.Web应用程序:工程下的web.xml配置错误页面信息:

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/jsp/404.jsp</location>
    </error-page>
    
    <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/jsp/500.jsp</location>
    </error-page>

    <error-page>
        <exception-type>
            java.lang.Exception
        </exception-type>
        <location>/WEB-INF/jsp/error.jsp</location>
    </error-page>

3.Spring框架处理异常:

<!-- 异常处理器 -->
    <bean 
    class=
"org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!-- 这个name属性作用:将异常类型与错误页面进行对应 -->
        <property name="exceptionMappings">
            <props>
                <!-- 下面这句的意思:
                    error与前面配置的视图处理器配合,找到error.jsp页面
                    当任何控制器抛出RuntimeException的时候,
                    就转发到error.jsp的页面上 。
                    还可以增加其他类型的异常以及对应的jsp页面,就是下面的这句
                    可以写多个。key里面也可以写自定义异常的完全限定名。-->
                <prop key="java.lang.RuntimeException">
                    error
                </prop>
                <prop key="java.lang.IndexOutOfBoundsException">
                    error1
                </prop>
            </props>
        </property>
    
    </bean>

4.控制器注释处理异常:

    @ExceptionHandler
    public String execute(
            HttpServletRequest req,
            Exception e) throws Exception {
        if(e instanceof NullPointerException) {
            req.setAttribute("msg", "空指针喽!");
            return "message";//转发到message页面
        }
        //还可以增加if处理其他类型的异常。。。
        throw e;//若该类型异常处理不了,一定抛出!
    }

5.最里层的try...catch处理异常方式有很多,例如:返回json对象到页面处理异常,重定向主页地址,转发到错误页面,继续向上抛出等等,根据情况处理异常。

原文地址:https://www.cnblogs.com/cainiao-Shun666/p/8488220.html