在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的。那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容—>异常处理。
在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>
运行项目:
可以看到异常已经被捕捉并显示,这样只要把我们的其它的Controller全部继承于BaseController就能实现异常的集中捕捉和处理了。
相关推荐
总的来说,"SpringMVC学习编程代码"提供的资源包括了SpringMVC的核心概念和实际应用,如配置文件、Controller、视图解析、数据绑定、异常处理以及拦截器的使用。通过这个项目,开发者可以深入理解SpringMVC的工作...
5. AOP(面向切面编程):结合Spring的AOP功能,实现全局异常处理、事务管理等。 6. 国际化:通过LocaleResolver和MessageSource实现多语言支持。 五、实战应用 1. 创建MVC项目:搭建SpringMVC环境,编写Controller...
在这个"springMvc学习相关jar包"中,包含了一系列与 Spring MVC 开发相关的 jar 包,这些 jar 包是构建和运行 Spring MVC 应用的基础。下面我们将详细探讨 Spring MVC 的核心概念和关键组件。 1. **...
内容概要:超详细SpringMVC笔记,包含初始SpringMVC,请求与响应,REST风格,SSM整合,表现层数据封装,异常处理器,项目异常处理方案,前后台联调,拦截器等知识点适合人群:学习过Spring课程的人群,初步理解框架...
10. **异常处理**: - SpringMVC通过@ControllerAdvice和@ExceptionHandler注解实现全局异常处理。 - 可以定义一个全局的异常处理器,处理所有Controller中抛出的异常,提供统一的错误页面或JSON响应。 通过以上...
8. **异常处理**:介绍如何配置全局和局部异常处理器,以优雅地处理运行时错误。 9. **验证**:学习使用JSR 303/349 Bean Validation进行表单验证,以及如何在SpringMVC中集成这些验证规则。 10. **RESTful API**...
在"springMVC3.2中英文手册"中,你将找到SpringMVC 3.2版本的详细文档,涵盖了许多主题,如配置、注解驱动的开发、数据绑定、异常处理、国际化、视图解析器、模型AndView对象的使用,以及与Spring其他模块(如AOP、...
SpringMVC提供了全局异常处理机制,可以通过@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。 10. **数据验证**: SpringMVC集成了JSR 303/349 Bean Validation,可以对表单提交的数据进行验证。 ...
10. **Maven或Gradle构建**:大多数现代Spring MVC项目使用Maven或Gradle作为构建工具,它们管理依赖关系,自动化构建过程,并提供了一系列插件来简化测试和部署。 在压缩包文件"springMVCdemo"中,你可能会找到一...
这个"springmvc 学习指南 源码 app01-app05"压缩包包含了一系列的应用示例,帮助开发者从实践角度深入理解Spring MVC的工作原理和使用方式。 1. **Spring MVC 概述** Spring MVC是Spring框架的一部分,它负责处理...
8. **异常处理**:SpringMVC提供了一种优雅的方式处理程序中的异常,可以定义全局的异常处理器,或者在Controller方法上使用`@ExceptionHandler`注解来捕获特定异常。 9. **国际化与本地化**:SpringMVC支持多语言...
10. **源码分析**:由于此jar包包含了源码,开发者可以通过阅读源码学习Jetbrick-SpringMVC的设计模式和最佳实践,提升自己的编程技能。 了解这些知识点后,开发者可以在实际项目中充分利用Jetbrick-SpringMVC的...
在实战过程中,你将学习如何配置SpringMVC,如定义拦截器、视图解析器、异常处理器等。还会涉及到MyBatis的动态SQL、事务管理,以及如何进行单元测试和集成测试。同时,了解Maven的生命周期和插件,能帮助你更好地...
它简化了Web应用的开发,通过DispatcherServlet进行请求分发,HandlerMapping处理映射,ModelAndView构建模型和视图,ViewResolver解析视图,以及一系列拦截器和异常处理器。 1. 请求处理流程:客户端发起请求到达...
8. **异常处理**:通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 9. **验证**:使用Hibernate Validator或者JSR-303/JSR-349可以对输入数据进行验证。 10. **MVC配置**:...
8. **异常处理**: SpringMVC提供了优雅的异常处理机制,允许我们用注解定义全局或特定异常的处理器。`@ExceptionHandler`注解用于捕获并处理指定的异常,而`@ControllerAdvice`注解则用于定义一个全局的异常处理器。...
这个"springmvc完整的练习"应该包含了一系列用于学习和实践Spring MVC的代码和配置文件,帮助开发者深入理解其工作原理和最佳实践。下面将详细阐述Spring MVC的关键知识点。 1. **DispatcherServlet**: Spring MVC...