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对象到页面处理异常,重定向主页地址,转发到错误页面,继续向上抛出等等,根据情况处理异常。

 

posted @   迷走神经  阅读(345)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示