`
pzhu424
  • 浏览: 5617 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

SpringMVC 统一异常管理配置方式

阅读更多

       这段时间出差,项目组要求要用SpringMVC的统一异常处理,之前对异常的处理也比较随意,所以通过这次应用感觉SpringMVC的统一异常处理还是比较好用的。

一、SpringMVC统一异常处理的方式

SpringMVC提供了三种统一异常处理的配置方式:

  • 利用springMVC预置的简单异常处理器SimpleMappingExceptionResolver
  • 模拟SimpleMappingExceptionResolver,通过实现springMVC提供的HandlerExceptionResolver接口实现个性化的异常处理器
  •  通过注解的方式实现异常统一处理(@ExceptionHandler)

二、使用SimpleMappingExceptionResolver

SimpleMappingExceptionResolver是spring已经实现的处理器,所以只需要在spring的类容器中注册这个类即可:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <!-- 定义出现默认的异常时,跳转的页面 -->
     <property name="defaultErrorView" value="common/exp"></property>  
     <!-- 定义在异常接收页面,展现内容的属性值 -->
     <property name="exceptionAttribute" value="message"></property> 
     <!-- 定义需要特殊处理的异常 --> 
     <property name="exceptionMappings">  
          <props>  
               <!-- 指定出现空指针异常时,页面跳转到NULL-Exception页面,可以定义多个prop节点 -->
               <prop key="java.lang.NullPointException">common/NULL-Exception</prop>  
          </props>  
     </property>  
</bean>

 异常接收页面:

<%@ 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>错误提示</title>
</head>
<body>
	自定义的异常处理界面 ${message }
</body>
</html>

 

 三、继承HandlerExceptionResolver

 自定义一个resolver类,实现HandlerExceptionResolver接口

 

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;


public class CtrlExceptionResolver implements HandlerExceptionResolver{

	public static Logger log = Logger.getLogger(CtrlExceptionResolver.class);

	@Override
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		CtrlException ctrlException = null;

		log.debug("产生异常的URL为" + request.getServletContext() + request.getRequestURI());
		log.debug(ex);
		log.error(ex);

		if(ex instanceof CtrlException){
			ctrlException = (CtrlException)ex;
		} else {
			ctrlException = new CtrlException(ex.toString());
		}
		String message = ctrlException.getMessage();
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", message);
		modelAndView.setViewName("common/exp");

		return modelAndView;
	}

}
 然后可以通过注解或者XML配置的方式将CtrlExceptionResolver注册到spring类容器中。

 

 

<bean class="test.util.exception.CtrlExceptionResolver"></bean>

 四、通过@ExceptionHandler实现异常统一处理

这种方式只需要在你想处理的controller中添加以下处理方法即可:

@ExceptionHandler  
public String exp(HttpServletRequest request, Exception ex) {  
     request.setAttribute("ex", ex);
     return "common/exp"; 
}  

 假如你想特殊处理某些异常,然后跳转到其他页面,可以在代码中判断ex参数的类类型,然后return到你想要的页面。

如果你想让所有的controller都进行类似的异常处理,你可以创建一个基类,然后所有的controller都继承自这个基类,而这个基类中实现上述方法即可。

虽然是在controller中加入的注解,他可以处理到与这个controller产生关联的service、DAO等。

五、优缺点

1、第一种方式可以满足一些简单的异常处理,而且最重要的是,它只能将异常的message打印输送到页面显示, 不能个性化异常信息。

2、第二种方式除了可以满足第一种方式的处理之外,还可以满足个性化异常信息的定义。

3、第三种方式更加灵活,可以根据需要配置想要处理的controller,但是对于代码的侵入性较强。

 

除了这种方式者外,一些Unchecked Exception需要通过web.xml的配置方式进行处理,如一些404、500的错误:

	<error-page>
		<error-code>404</error-code>
		<location>/error/404.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error/500.jsp</location>
	</error-page>

 

分享到:
评论

相关推荐

    Maven+SpringMVC实现统一异常处理

    总结,通过Maven和SpringMVC的结合,我们可以构建一个高效的统一异常处理系统,提高代码的可维护性和用户体验。在实际开发中,还可以根据项目需求进行更复杂的异常分类和处理策略,以满足不同场景下的需求。

    springMVC配置好的环境

    12. **异常处理**:通过全局异常处理器(@ControllerAdvice),可以统一处理应用中的异常,提供友好的错误页面。 在配置好 Spring MVC 环境后,开发者可以专注于业务逻辑的实现,而不必关心底层的请求处理和视图...

    springmvc 异常统一处理的三种方式详解.docx

    在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够以优雅的方式响应,提供统一的错误信息,并保持代码的整洁和模块化。本篇文章将详细探讨Spring MVC处理异常的三种主要方法:...

    springmvc实现的简单用户管理系统

    SpringMVC的配置文件,通常为`spring-servlet.xml`,包含了对DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver等的配置,也可能会有数据源、事务管理器等其他Spring Bean的配置。 7. **注解驱动...

    springmvc核心jar包及配置文件

    可以通过配置全局异常处理器,统一处理应用程序中抛出的异常,提供友好的错误页面。 综上所述,"springmvc核心jar包及配置文件"是搭建和运行Spring MVC应用的基础,它们包含了处理Web请求、管理业务逻辑和展示结果...

    springMVC+MYBATIS事务管理

    通过配置Spring的`PlatformTransactionManager`,我们可以声明式地控制事务的边界,使得事务管理更加简单和统一。 2. **MyBatis框架的事务管理** MyBatis本身并不支持事务管理,但它可以与Spring无缝集成,利用...

    springmvc处理器和配置器

    - Spring MVC提供了统一的异常处理机制,可以使用`@ExceptionHandler`注解定义处理特定异常的方法,或者全局的`@ControllerAdvice`类处理所有控制器中的异常。 7. **数据绑定和验证**: - Spring MVC支持自动将...

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂sql采用Mapper.xml配置 使用了layui的弹出层、菜单、文件上传、富...

    一个简单的springMVC项目的配置文件 ---- 2016-05-31

    标题中的“一个简单的springMVC项目的配置文件”指的是基于Spring MVC框架构建的Web应用程序的配置文件,这通常包括XML配置、Java配置或者两者的结合。Spring MVC是Spring框架的一个模块,用于处理Web请求和响应,它...

    springMVC练手代码

    10. **异常处理**:通过`@ExceptionHandler`注解,可以在控制器中统一处理异常,或者在配置文件中全局定义异常处理器。 通过这个练手代码,你可以实践上述概念,了解它们如何协同工作。同时,你还能学习如何集成...

    Spring+SpringMVC+MyBatis(SSM)CRM 客户关系管理系统项目案例(可运行)

    - **异常处理**:统一处理应用可能出现的异常。 - **拦截器**:自定义拦截器进行权限验证、日志记录等操作。 **3. MyBatis** MyBatis是一个持久层框架,它允许开发者编写SQL语句并将其与Java代码集成。在CRM系统中...

    SpringMVC统一异常处理三种方法详解

    在Spring MVC框架中,统一异常处理是提高代码质量和可维护性的重要手段。本文将详细介绍三种在Spring MVC中实现统一异常处理的方法。 首先,Spring MVC提供了一个内置的异常处理器`SimpleMappingExceptionResolver`...

    Spring+SpringMVC+MyBatis 会议管理系统

    【Spring+SpringMVC+MyBatis 会议管理系统】是一个基于JavaWeb开发的典型应用,它结合了Spring框架的核心功能、SpringMVC的MVC设计模式以及MyBatis的持久层处理,为实现高效的会议管理提供了强大的技术支撑。...

    SpringMVC 中的拦截器与异常处理

    在SpringMVC中,异常处理可以帮助我们优雅地管理可能出现的错误情况,提供统一的错误页面和反馈。 1. 声明式异常处理:可以通过在控制器方法上使用`@ExceptionHandler`注解来指定特定异常的处理逻辑。这种方法适用...

    springMVC+Mybatis 参考资料(一)

    2. Mybatis的官方文档,详细介绍其核心概念、配置方式以及动态SQL的使用。 3. 示例代码,包括SpringMVC的Controller、Service、DAO以及Mybatis的Mapper接口和XML配置。 4. 整合SpringMVC和Mybatis的教程,如何配置...

    SpringMVC 4.0

    4. **异常处理(Exception Handling)**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局处理控制器中的异常,提供了统一的错误页面和API响应。 5. **数据绑定与验证(Data Binding and Validation)**:...

    SpringMVC学习编程代码

    对于异常处理,SpringMVC提供了`@ExceptionHandler`注解,可以用来捕获并处理特定类型的异常,创建统一的错误页面或返回JSON响应。 在实际项目中,我们可能还需要配置拦截器(Interceptor),它们可以对请求和响应...

    Java SpringMVC 学习路线.pdf

    SpringMVC允许通过创建全局异常处理器来统一处理异常,并且可以配置异常处理器以及提供更为智能和友好的异常提示。 图片上传处理需要配置虚拟目录和多媒体解析器。编写图片上传处理代码时,需要在JSP页面进行修改,...

    springMVC框架下的管理系统

    在这个"springMVC框架下的管理系统"项目中,我们可以看到一个典型的Java Web应用程序的构建方式。 首先,我们来深入理解SpringMVC的组成部分: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收...

Global site tag (gtag.js) - Google Analytics