Spring3.0中对异常的处理方法一共提供了两种:一种是使用HandlerExceptionResolver接口;一种是在Controller类内部使用@ExceptionHandler注解。使用第一种方式可以实现全局异常控制,并且Spring已经提供了一个默认的实现类SimpleMappingExceptionResolver;使用第二种方式可以在Controller内部实现更个性化点异常处理方式,灵活性更高。一般来说,项目中只需要采用第一种方式就可以了,每个人都自己定义异常的展现方式,太过个性了,不统一。
从目前的调查结果看,这两种方式不能共存,不知道未来的版本是否能将他们合二为一,这样才能灵活配置。
基于HandlerExceptionResolver接口的异常处理:
使用这种方式只需要实现resolveException方法,该方法返回一个ModelAndView对象,在方法内部对异常的类型进行判断,然后常见合适的ModelAndView对象,如果该方法返回了null,则Spring会继续寻找其他的实现了HandlerExceptionResolver接口的Bean。换句话说,Spring会搜索所有注册在其环境中的实现了HandlerExceptionResolver接口的Bean,逐个执行,直到返回了一个ModelAndView对象。
示例代码:
/**
* 基于HandlerExceptionResolver接口的异常处理类
* @author ZYWANG 2011-4-2
*/
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
if(exception instanceof IOException){
return new ModelAndView("ioexp");
}else if(exception instanceof SQLException){
return new ModelAndView("sqlexp");
}
return null;
}
}
这个类必须声明到Spring中去,让Spring管理它,你可以使用@Component标签,也可以使用<bean/>节点。为了简单的进行异常处理,Spring提供了SimpleMappingExceptionResolver类,该类实现了HandlerExceptionResolver接口,需要使用时只需要使用<bean/>节点进行声明即可,示例如下:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->
<property name="defaultErrorView" value="error"></property>
<!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->
<property name="exceptionAttribute" value="ex"></property>
<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 -->
<property name="exceptionMappings">
<props>
<prop key="IOException">error/ioexp</prop>
<prop key="java.sql.SQLException">error/sqlexp</prop>
</props>
</property>
</bean>
基于@ExceptionHandler的异常处理:
该方法需要定义在Controller内部,然后创建一个方法并用@ExceptionHandler注解来修饰用来处理异常,这个方法基本和@RequestMapping修饰的方法差不多,只是可以多一个类型为Exception的参数,@ExceptionHandler中可以添加一个或多个异常的类型,如果为空的话则认为可以触发所有的异常类型错误。
示例代码:
/**
* 基于@ExceptionHandler异常处理
* @author ZYWANG 2011-4-2
*/
@Controller
public class ExceptionHandlerController {
@ExceptionHandler(value={IOException.class,SQLException.class})
public String exp(Exception ex,HttpServletRequest request) {
request.setAttribute("ex", ex);
return "/error.jsp";
}
}
以上配置基于Spring3.05进行设置,参考其《Reference Documentation》
分享到:
相关推荐
Spring 3.0 是一个里程碑式的版本,在Java企业级应用开发领域中占据着核心地位。这个版本的发布引入了许多新特性、改进和优化,旨在提升开发者的工作效率和应用程序的可维护性。Spring 框架以其强大的依赖注入...
Spring 3.0 API是Java开发中至关重要的一个框架,它是Spring框架的一个主要...通过查阅`Spring3.0-API.chm`文件,开发者可以快速查找并学习到Spring 3.0中的各种功能和API,从而更好地利用Spring进行应用程序的开发。
8. **异常处理**:通过`@ExceptionHandler`注解,可以在控制器中处理特定类型的异常,提供更友好的错误页面。 9. **国际化**:Spring MVC支持多语言环境,通过`MessageSource`接口和`Accept-Language`头,可以实现...
《Spring 3.0、Spring MVC 3.0与MyBatis 3.0整合详解》 在现代Java企业级应用开发中,Spring框架因其强大的功能和灵活性而被广泛使用。Spring 3.0作为其重要的一个版本,引入了诸多改进和新特性,提升了开发效率和...
7. **Spring MVC**:Spring的Web MVC模块在3.0版本中也有所提升,支持更多视图技术(如Freemarker、Velocity),并改进了模型绑定和异常处理。 8. **测试支持**:Spring 3.0提供了丰富的测试工具,如`@...
在Spring 3.0中,IoC容器通过XML、注解以及Java配置三种方式来定义bean。注解配置的增强使得代码更加简洁,降低了XML配置的复杂性。`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件,而`...
4. **MVC框架**:Spring MVC的改进包括支持RESTful风格的URL映射,模板引擎集成,以及更好的异常处理机制。 5. **Web Flow**:Spring Web Flow 2.0与Spring 3.0集成,提供了一种管理用户交互流程的强大方式。 6. **...
1. **环境搭建**:首先,需要在项目中引入`spring3.0.jar`,这个库包含了Spring框架的核心组件。如果使用Maven或Gradle,可以在pom.xml或build.gradle文件中添加对应的依赖。 2. **配置文件**:虽然Spring 3.0提倡...
在这个教程中,我们将深入探讨Spring 3.0版本的MVC配置。 一、环境准备 在开始配置Spring MVC之前,确保你已经安装了以下工具: 1. Java Development Kit (JDK):Spring 3.0支持JDK 1.5及以上版本。 2. Apache ...
通过`@ExceptionHandler`注解,可以在控制器中定义全局或特定异常的处理方法。 6. **验证**:Spring 3.0也支持数据验证,如JSR-303/JSR-349 Bean Validation。通过`@Valid`注解,可以在方法参数上进行数据验证,...
5. **Spring MVC增强**:Spring 3.0的MVC模块增加了对RESTful风格的支持,提供更强大的视图解析器,以及改进的异常处理机制。 6. **数据访问增强**:Spring 3.0在数据访问层做了大量改进,包括JDBC抽象层的增强,...
在Spring 3.0框架中,注解(Annotion)的应用极大地简化了配置和代码的可读性,使得开发者可以更加专注于业务逻辑而非繁琐的XML配置。本实例将深入探讨Spring 3.0中的核心注解,以及如何在实际项目中应用它们。 1. **...
`org.springframework.web-3.0.3.RELEASE.jar` 包含了Spring对Servlet API的抽象和扩展,如请求参数的处理、异常处理等,为Web开发提供了一致的编程模型。 `org.springframework.jdbc-3.0.3.RELEASE.jar` 是Spring...
至于“spring3.0-lib”这个压缩包,很可能包含了Spring 3.0所有必要的JAR文件,包括上述各个模块的实现。在使用时,开发者需要根据项目需求选择合适的JAR添加到类路径中。为了确保项目运行正常,应仔细检查包含的JAR...
声明式事务管理允许在配置中指定哪些方法应该在事务内运行,无需在代码中显式处理事务。 10. **spring-expression-3.1.4.RELEASE.jar**:Spring表达式语言(SpEL)模块,提供了强大的表达式评估能力,可以用来在...
在这个专题里,我们将深入探讨Spring 3.0中的注解注入机制。 首先,注解注入允许我们通过在类的字段或方法上使用特定的注解来声明依赖关系,而不是在XML配置文件中进行声明。主要的注解包括`@Autowired`、`@...
4. **配置AOP**:在Spring 3.0中,可以使用XML配置或者注解方式来声明AOP。XML配置通过`<aop:config>`和`<aop:advisor>`等元素定义切入点和通知。注解方式则更加简洁,如`@Aspect`定义切面,`@Pointcut`定义切入点,...
5. **MVC框架的改进**:Spring MVC在3.0版本中进行了大量优化,包括模板引擎的集成(例如FreeMarker、Velocity、Thymeleaf等)、RESTful支持、ModelAndView的改进以及异常处理的增强。 6. **Spring Expression ...
为了使Spring MVC能够识别并处理这些注解,你需要在`DispatcherServlet`的配置中包含`DefaultAnnotationHandlerMapping`和`AnnotationMethodHandlerAdapter`。这两个组件是Spring MVC框架的核心部分,它们负责映射...