`
jaesonchen
  • 浏览: 313517 次
  • 来自: ...
社区版块
存档分类
最新评论

SpringMVC学习系列(10) 之 异常处理

 
阅读更多

在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的。那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容—>异常处理。

在Spring MVC中我们可以通过以下2中途径来对异常进行集中处理:

一.继承HandlerExceptionResolver接口实现自己的处理方法,如:

复制代码
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {   
  
    @Override  
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {   

        //添加自己的异常处理逻辑,如日志记录等        

         // TODO Auto-generated method stub   
        return new ModelAndView("exception");   
    }   
  
}
复制代码

然后在项目的配置文件中添加:

<bean id="exceptionResolver" class="所在包名.MyHandlerExceptionResolver"/>

这样就完成了异常的捕捉和处理。

 

二.我们介绍了第一种捕捉处理异常方式,但是第一种方式需要在配置文件中进行配置,有的时候我们会觉得配置文件内容太多太乱,那么我们就可以借助@ExceptionHandler注解来实现零配置的异常捕捉和处理。

首先,在我们项目的包com.demo.web.controllers中为controller建立一个父类BaseController,内容如下:

复制代码
package com.demo.web.controllers;

import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ExceptionHandler;

public abstract class BaseController {  

    @ExceptionHandler
    public String exception(HttpServletRequest request, Exception e) {  
          
      //添加自己的异常处理逻辑,如日志记录   
        request.setAttribute("exceptionMessage", e.getMessage());  
          
        // 根据不同的异常类型进行不同处理
        if(e instanceof SQLException) 
            return "testerror";   
        else
            return "error";  
    }  
    
}
复制代码

 

其次,修改项目中HelloWorldController让它继承于BaseController以便进行测试:

public class HelloWorldController extends BaseController{
    //...内容省略
}

然后,修改HelloWorldController 中的index方法,使其抛出异常,看能不能正常捕捉:

复制代码
//@AuthPassport
@RequestMapping(value={"/index","/hello"})
public ModelAndView index() throws SQLException{
    
    throw new SQLException("数据库异常。");
    
    /*ModelAndView modelAndView = new ModelAndView();  
    modelAndView.addObject("message", "Hello World!");  
    modelAndView.setViewName("index");  
    return modelAndView;*/
}
复制代码

最后,在views文件夹中添加testerror.jsp视图来显示错误信息:

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error!</title>
</head>
<body>
    ${exceptionMessage}
</body>
</html>
复制代码

运行项目:

1

可以看到异常已经被捕捉并显示,这样只要把我们的其它的Controller全部继承于BaseController就能实现异常的集中捕捉和处理了。

 

分享到:
评论

相关推荐

    SpringMVC学习编程代码

    总的来说,"SpringMVC学习编程代码"提供的资源包括了SpringMVC的核心概念和实际应用,如配置文件、Controller、视图解析、数据绑定、异常处理以及拦截器的使用。通过这个项目,开发者可以深入理解SpringMVC的工作...

    超级详细SpringMVC学习资料

    5. AOP(面向切面编程):结合Spring的AOP功能,实现全局异常处理、事务管理等。 6. 国际化:通过LocaleResolver和MessageSource实现多语言支持。 五、实战应用 1. 创建MVC项目:搭建SpringMVC环境,编写Controller...

    springMvc学习相关jar包

    在这个"springMvc学习相关jar包"中,包含了一系列与 Spring MVC 开发相关的 jar 包,这些 jar 包是构建和运行 Spring MVC 应用的基础。下面我们将详细探讨 Spring MVC 的核心概念和关键组件。 1. **...

    SpringMVC学习笔记与项目源码

    内容概要:超详细SpringMVC笔记,包含初始SpringMVC,请求与响应,REST风格,SSM整合,表现层数据封装,异常处理器,项目异常处理方案,前后台联调,拦截器等知识点适合人群:学习过Spring课程的人群,初步理解框架...

    尚硅谷SpringMVC部分全套教学文档笔记

    10. **异常处理**: - SpringMVC通过@ControllerAdvice和@ExceptionHandler注解实现全局异常处理。 - 可以定义一个全局的异常处理器,处理所有Controller中抛出的异常,提供统一的错误页面或JSON响应。 通过以上...

    springmvc系列教程PDF精讲.

    8. **异常处理**:介绍如何配置全局和局部异常处理器,以优雅地处理运行时错误。 9. **验证**:学习使用JSR 303/349 Bean Validation进行表单验证,以及如何在SpringMVC中集成这些验证规则。 10. **RESTful API**...

    springMVC资料

    在"springMVC3.2中英文手册"中,你将找到SpringMVC 3.2版本的详细文档,涵盖了许多主题,如配置、注解驱动的开发、数据绑定、异常处理、国际化、视图解析器、模型AndView对象的使用,以及与Spring其他模块(如AOP、...

    SpringMVC后台

    SpringMVC提供了全局异常处理机制,可以通过@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。 10. **数据验证**: SpringMVC集成了JSR 303/349 Bean Validation,可以对表单提交的数据进行验证。 ...

    springMVC 学习参考第二版

    10. **Maven或Gradle构建**:大多数现代Spring MVC项目使用Maven或Gradle作为构建工具,它们管理依赖关系,自动化构建过程,并提供了一系列插件来简化测试和部署。 在压缩包文件"springMVCdemo"中,你可能会找到一...

    springmvc 学习指南 源码 app01-app05

    这个"springmvc 学习指南 源码 app01-app05"压缩包包含了一系列的应用示例,帮助开发者从实践角度深入理解Spring MVC的工作原理和使用方式。 1. **Spring MVC 概述** Spring MVC是Spring框架的一部分,它负责处理...

    一个简单的springMVC入门项目

    8. **异常处理**:SpringMVC提供了一种优雅的方式处理程序中的异常,可以定义全局的异常处理器,或者在Controller方法上使用`@ExceptionHandler`注解来捕获特定异常。 9. **国际化与本地化**:SpringMVC支持多语言...

    jetbrick-springmvc jar包(包含源码)

    10. **源码分析**:由于此jar包包含了源码,开发者可以通过阅读源码学习Jetbrick-SpringMVC的设计模式和最佳实践,提升自己的编程技能。 了解这些知识点后,开发者可以在实际项目中充分利用Jetbrick-SpringMVC的...

    SpringMVC项目实战教程

    在实战过程中,你将学习如何配置SpringMVC,如定义拦截器、视图解析器、异常处理器等。还会涉及到MyBatis的动态SQL、事务管理,以及如何进行单元测试和集成测试。同时,了解Maven的生命周期和插件,能帮助你更好地...

    springmvc_mybatis1110

    它简化了Web应用的开发,通过DispatcherServlet进行请求分发,HandlerMapping处理映射,ModelAndView构建模型和视图,ViewResolver解析视图,以及一系列拦截器和异常处理器。 1. 请求处理流程:客户端发起请求到达...

    SpringMvc所需所有jar

    8. **异常处理**:通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 9. **验证**:使用Hibernate Validator或者JSR-303/JSR-349可以对输入数据进行验证。 10. **MVC配置**:...

    跟开涛学SpringMVC(6.2)SpringMVC3强

    8. **异常处理**: SpringMVC提供了优雅的异常处理机制,允许我们用注解定义全局或特定异常的处理器。`@ExceptionHandler`注解用于捕获并处理指定的异常,而`@ControllerAdvice`注解则用于定义一个全局的异常处理器。...

    springmvc完整的练习

    这个"springmvc完整的练习"应该包含了一系列用于学习和实践Spring MVC的代码和配置文件,帮助开发者深入理解其工作原理和最佳实践。下面将详细阐述Spring MVC的关键知识点。 1. **DispatcherServlet**: Spring MVC...

Global site tag (gtag.js) - Google Analytics