统一异常处理:
一、通过HandlerExceptionResolver/SimpleMappingExceptionResolver来处理和分发各种异常:
来源:http://www.blogjava.net/wuxufeng8080/articles/191150.html
Web应用中对于异常的处理方式与其他形式的应用并没有太大的不同――通过try/catch
语句针对不同的异常进行相应处理。
但是在具体实现中,由于异常层次、种类繁杂,我们往往很难在Servlet、JSP层妥善的处
理好所有异常情况,代码中大量的try/catch代码显得尤为凌乱。
我们通常面对下面两个主要问题:
1. 对异常实现集中式处理
典型情况:对数据库异常记录错误日志。一般处理方法无外两种,一是在各处数据库
访问代码的异常处理中,加上日志记录语句。二是将在数据访问代码中将异常向上抛
出,并在上层结构中进行集中的日志记录处理。
第一种处理方法失之繁琐、并且导致系统难以维护,假设后继需求为“对于数据库异
常,需记录日志,并发送通知消息告知系统管理员”。我们不得不对分散在系统中的各
处代码进行整改,工作量庞大。
第二种处理方法实现了统一的异常处理,但如果缺乏设计,往往使得上层异常处理过
于复杂。
这里,我们需要的是一个设计清晰、成熟可靠的集中式异常处理方案。
2. 对未捕获异常的处理
对于Unchecked Exception而言,由于代码不强制捕获,往往被程序员所忽略,如果
运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我
们可能不得不面对尴尬的500服务器内部错误提示页面。
这里,我们需要一个全面而有效的异常处理机制。
上面这两个问题,从技术角度上而言并算不上什么大的难点。套用一些短平快的设计模式,
我们也能进行处理并获得不错的效果。同时,目前大多数服务器也都支持在Web.xml中通过
<error-page>(Websphere/Weblogic)或者<error-code>(Tomcat)节点配置特定异常情
况的显示页面。
Spring MVC中提供了一个通用的异常处理机制,它提供了一个成熟的,简洁清晰的异常处
理方案。如果基于Spring MVC开发Web应用,那么利用这套现成的机制进行异常处理也更加自
然和有效。
Spring MVC中的异常处理:
以前面的注册系统为例,首先,在Dispatcher配置文件Config.xml中增加id为
“exceptionResolver”的bean定义:
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingEx
ceptionResolver">
<property name="defaultErrorView">
<value>failure</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">showDBError</prop>
<prop key="java.lang.RuntimeException">showError</prop>
</props>
</property>
</bean>
通过SimpleMappingExceptionResolver我们可以将不同的异常映射到不同的jsp页
面(通过exceptionMappings属性的配置),同时我们也可以为所有的异常指定一个默认的异
常提示页面(通过defaultErrorView属性的配置),如果所抛出的异常在exceptionMappings
中没有对应的映射,则Spring将用此默认配置显示异常信息(注意这里配置的异常显示界面均
仅包括主文件名,至于文件路径和后缀已经在viewResolver中指定)。
一个典型的异常显示页面如下:
<html>
<head><title>Exception!</title></head>
<body>
<% Exception ex = (Exception)request.getAttribute("exception"); %>
<H2>Exception: <%= ex.getMessage();%></H2>
<P/>
<% ex.printStackTrace(new java.io.PrintWriter(out)); %>
</body>
</html>
exception 实在SimpleMappingExceptionResolver 被存放到request中的,具体可以查看源代码。
如果SimpleMappingExceptionResolver无法满足异常处理的需要,我们可以针对
HandlerExceptionResolver接口实现自己异常处理类,这同样非常简单(只需要实现一个
resolveException方法)。
如果有ViewResolver,则制定的jsp页面必须在那个页面下,到时候如果找不到页面,可以根据错误提示再调整页面路径
二、通过@ExceptionHandler在特定控制器中进行异常处理。
@Controller
public class MyController {
/**
* 用于处理异常的
* @return
*/
@ExceptionHandler(MyException.class)
public String exception(MyException e) {
System.out.println(e.getMessage());
e.printStackTrace();
return "exception";
}
@RequestMapping("test")
public void index() {
throw new MyException("出错了!");
}
}
在访问MyController的 index时报会抛出异常,而该控制器有个标识了@ExceptionHandler的异常处理方法,这时,该方法将被调用。
当然,个人觉得不好的地方也是很明显的,那就是异常处理必须与可能出现异常的方法在同一个控制器中。
分享到:
相关推荐
本文将深入探讨Spring MVC中的异常处理机制,帮助你更好地理解如何优雅地处理错误和异常。 1. **Spring MVC 异常处理概述** Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@...
在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够优雅地响应。本文将深入探讨Spring MVC中的异常处理机制,包括如何配置、自定义异常处理器以及异常转换策略。 首先,Spring ...
1.创建第一个 Spring MVC 程序案例 2.Spring MVC @RequestMapping 注解案例 3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 5.Spring MVC @ModelAttribute 注解案例 ...15.Spring MVC 异常处理案例
spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler
Spring MVC异常处理机制示例详解 Spring MVC 异常处理机制是指在 Spring MVC 框架中,对异常的捕捉和处理的机制。该机制主要是通过 HandlerExceptionResolver 接口来实现的,该接口只有一个处理方法,即 ...
错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...
十一、Spring MVC如何实现全局的异常处理:提供了实现全局异常处理器的方式,让开发者能够捕获所有控制器抛出的异常,统一处理。 十二、Spring MVC如何把全局异常记录到日志中:讲述了如何将异常信息记录到日志文件...
6. **异常处理**:通过定义全局异常处理器,可以统一处理应用程序中的异常,提高代码的整洁性和可维护性。 7. **多视图解析器**:Spring MVC支持多种视图解析器,如JSP、FreeMarker、Thymeleaf等,可以根据项目需求...
8. **异步处理**:Spring MVC 4.0引入了异步请求处理,通过@ControllerAdvice和@Async注解,可以实现后台任务的异步执行,提高响应速度。 9. **多Part文件上传**:支持多文件上传,利用MultipartFile接口处理上传...
除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...
- **@ExceptionHandler 注解**:用于声明异常处理方法。 - **处理一般的 Spring MVC 异常**:Spring MVC 自身的一些异常可以在这里统一处理。 - **使用 @ResponseStatus 注解业务异常**:为自定义异常添加 HTTP 状态...
`org.springframework.web-3.1.1.RELEASE.jar` 包含了Spring框架对Web应用的支持,如过滤器、异常处理和请求映射等。 `javassist-3.12.0.GA.jar` 是Java编程辅助工具,它在运行时可以动态修改类和创建新的类,常...
异常处理** 通过自定义异常处理器,Spring MVC允许优雅地处理运行时异常,提供了统一的错误页面和异常信息。 **7. RESTful支持** Spring MVC支持构建RESTful服务,通过HTTP方法如GET、POST、PUT、DELETE等,实现...
它还负责处理视图解析和异常处理。 2. **Model-View-Controller(MVC)架构**: Spring MVC遵循MVC设计模式,将应用程序逻辑分解为模型(Model)、视图(View)和控制器(Controller)三个部分。模型处理业务逻辑,...
Spring MVC提供了一种优雅的异常处理机制,可以使用@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。此外,还可以自定义错误页面,提高用户体验。 8. **数据绑定和验证** Spring MVC支持自动的数据...
13. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局处理异常,提供统一的错误页面。 14. **RESTful风格**:Spring MVC支持创建RESTful API,通过HTTP方法(GET、POST、PUT、DELETE等)和...