`
H.Z
  • 浏览: 16743 次
  • 来自: 长沙
社区版块
存档分类
最新评论

spring之spring mvc对异常的处理

 
阅读更多

springMVC提供的异常处理主要有两种方式,一种是直接实现自己的 HandlerExceptionResolver,当然这也包括使用Spring已经为我们提供好的 SimpleMappingExceptionResolver和DefaultHandlerExceptionResolver,另一种是使用注解的 方式实现一个专门用于处理异常的Controller——ExceptionHandler.

 

 

1.spring mvc 自己实现了SimpleMappingExceptionResolver 和 DefaultHandlerExceptionResolver.



 DefaultHandlerExceptionResolver,该解析器只是对其中的一些比较典型的异常进行了拦截,然后返回对应的错误码.

 

public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionResolver {
//......


	@Override
	protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response,
			Object handler, Exception ex) {

		try {
			if (ex instanceof NoSuchRequestHandlingMethodException) {
				return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) ex, request, response,
						handler);
			}
			else if (ex instanceof HttpRequestMethodNotSupportedException) {
				return handleHttpRequestMethodNotSupported((HttpRequestMethodNotSupportedException) ex, request,
						response, handler);
			}
			else if (ex instanceof HttpMediaTypeNotSupportedException) {
				return handleHttpMediaTypeNotSupported((HttpMediaTypeNotSupportedException) ex, request, response,
						handler);
			}
			//......
		}
		catch (Exception handlerException) {
			logger.warn("Handling of [" + ex.getClass().getName() + "] resulted in Exception", handlerException);
		}
		return null;
	}

 

 

 SimpleMappingExceptionResolver提供了通过异常类型 exceptionMappings来进行异常与视图之间的映射关系,提供了在发生异常时通过statusCodes来映射异常返回的视图名称和对应的 HttpServletResponse的返回码。而且可以通过defaultErrorView和defaultErrorCode来指定默认 值,defaultErrorView表示当没有在exceptionMappings里面找到对应的异常类型时就返回defaultErrorView 定义的视图,defaultErrorCode表示在发生异常时当没有在视图与返回码的映射关系statusCodes里面找到对应的映射时默认返回的返 回码。在使用SimpleMappingExceptionResolver时,当发生异常的时 候,SimpleMappingExceptionResolver将会把当前的异常对象放到自身属性exceptionAttribute中,当没有指 定exceptionAttribute时,exceptionAttribute就是用默认值exception。

 

public class SimpleMappingExceptionResolver extends AbstractHandlerExceptionResolver {

	/** The default name of the exception attribute: "exception". */
	public static final String DEFAULT_EXCEPTION_ATTRIBUTE = "exception";
       //当发生异常时,与视图的映射
	private Properties exceptionMappings;

	private Class<?>[] excludedExceptions;

        //默认的视图,表示当抛出异常但没有在exceptionMappings里面找到对应的异常时 返回//名叫exception的视图
	private String defaultErrorView;

       //定义在发生异常时视图跟返回码的对应关系
	private Integer defaultStatusCode;

	private Map<String, Integer> statusCodes = new HashMap<String, Integer>();

	private String exceptionAttribute = DEFAULT_EXCEPTION_ATTRIBUTE;

 

 

在需要使用到SimpleMappingExceptionResolver来处理异常时,一般需在xml配置bean.

如:

 

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
        <property name="exceptionMappings">  
            <props>  
                <prop key="NumberFormatException">number</prop><!-- 表示当抛出NumberFormatException的时候就返回名叫number的视图 -->  
                <prop key="NullPointerException">null</prop>  
            </props>  
        </property>  
        <property name="defaultErrorView" value="exception"/><!-- 表示当抛出异常但没有在exceptionMappings里面找到对应的异常时 返回名叫exception的视图-->  
        <property name="statusCodes"><!-- 定义在发生异常时视图跟返回码的对应关系 -->  
            <props>  
                <prop key="number">500</prop><!-- 表示在发生NumberFormatException时返回视图number,然后这里定义发生异常时视图number对应的HttpServletResponse的返回码是500 -->  
                <prop key="null">503</prop>  
            </props>  
        </property>  
        <property name="defaultStatusCode" value="404"/><!-- 表示在发生异常时默认的HttpServletResponse的返回码是多少,默认是200 -->  
    </bean>  

 

 

2.使用@ExceptionHandler进行处理

 

使用@ExceptionHandler进行处理有一个不好的地方是在同一个Controller里面需要同时有进行异常处理的方法与出错的方法.

如:

 

@Controller  
public class GlobalController {  
  
      
    /** 
     * 用于处理异常的 
     * @return 
     */  
    @ExceptionHandler({MyException.class})  
    public String exception(MyException e) {  
        System.out.println(e.getMessage());  
        e.printStackTrace();  
        return "exception";  
    }  
      
    @RequestMapping("test")  
    public void test() {  
        throw new MyException("出错了!");  
    }  
      
      
} 

 这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用.

 

但是,一般在实际中,采用注解@ExceptionHandler来处理异常,都会建立一个父类BaseController.

 

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";  
    }  
    
}

 

TestExceptionController:

 

@Controller
@RequestMapping("/ex")
public class TestExceptionController extends BaseController{

	@RequestMapping("/index")
	public ModelAndView index() throws SQLException{
		
		throw new SQLException("数据库异常");
	}
}

 最后,添加testerror.jsp视图来显示错误信息:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %> 
    
<!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就能实现异常的集中捕捉和处理了

 


 

  • 大小: 8.6 KB
  • 大小: 8.6 KB
  • 大小: 6.4 KB
分享到:
评论

相关推荐

    spring mvc异常处理

    本文将深入探讨Spring MVC中的异常处理机制,帮助你更好地理解如何优雅地处理错误和异常。 1. **Spring MVC 异常处理概述** Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@...

    spring mvc统一处理异常

    spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    spring mvc异常简单处理

    在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够优雅地响应。本文将深入探讨Spring MVC中的异常处理机制,包括如何配置、自定义异常处理器以及异常转换策略。 首先,Spring ...

    最全最经典spring-mvc教程

    错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...

    spring2.0MVC+spring2.5MVC+portletMVC

    5. **异常处理**:Spring 2.0提供了@ControllerAdvice和@ExceptionHandler注解,使得全局异常处理更加简洁和高效。 接下来,Spring 2.5进一步扩展了这些特性,包括: 1. **@RequestMapping**:这是一个关键注解,...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    Spring框架是Java开发中最常用的开源框架之一,它极大地简化了企业级应用的开发工作。Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring ...

    Spring MVC jar包

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为开发者提供了模型-视图-控制器(MVC)架构,使开发人员能够更好地组织和分离应用程序的业务逻辑、数据处理和用户界面。Spring MVC是Spring框架的一个核心组件,...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    在提供的"spring MVC.docx"文档中,可能详细介绍了如何配置Spring MVC环境,创建Controller,处理请求,以及如何配置视图解析器等内容。对于初学者来说,这是一份很好的实践指南,可以帮助理解Spring MVC的工作原理...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    Spring Web MVC是Spring框架的核心模块之一,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。在Spring 5.0.9这个版本中,它延续了Spring对开发者友好、灵活且高性能的设计原则,为开发人员提供了强大的...

    spring框架的MVC

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用...Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

    spring-webmvc5.3.6 jar包.rar

    这个jar文件包含Spring MVC框架相关的所有类。  包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。  当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的...

    springfox-spring-webmvc-3.0.0-API文档-中文版.zip

    赠送jar包:springfox-spring-webmvc-3.0.0.jar; 赠送原API文档:springfox-spring-webmvc-3.0.0-javadoc.jar; 赠送源代码:springfox-spring-webmvc-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-...

    spring-webmvc-5.0.8.RELEASE-API文档-中文版.zip

    赠送jar包:spring-webmvc-5.0.8.RELEASE.jar; 赠送原API文档:spring-webmvc-5.0.8.RELEASE-javadoc.jar; 赠送源代码:spring-webmvc-5.0.8.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-webmvc-5.0.8....

    spring-webmvc-5.3.10-API文档-中文版.zip

    赠送jar包:spring-webmvc-5.3.10.jar; 赠送原API文档:spring-webmvc-5.3.10-javadoc.jar; 赠送源代码:spring-webmvc-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-webmvc-5.3.10.pom; 包含翻译后的API...

    开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp

    这个资源可能包含了从基础到进阶的Spring MVC应用开发知识,以及朱冰(可能是作者或讲师)对Spring MVC的理解和实践经验。 描述中的"朱冰-springmvc"提示我们这个资料可能由一位名叫朱冰的专家或教师提供,专门讲解...

    springfox-spring-webmvc-3.0.0-API文档-中英对照版.zip

    赠送jar包:springfox-spring-webmvc-3.0.0.jar; 赠送原API文档:springfox-spring-webmvc-3.0.0-javadoc.jar; 赠送源代码:springfox-spring-webmvc-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    3. **Spring MVC**:学习Spring MVC的架构,包括DispatcherServlet、Controller、Model、View、ModelAndView等概念,以及请求处理流程。 4. **Struts集成**:如果使用了spring-webmvc-struts.jar,需要了解如何在...

    Spring MVC 4.2.3

    9. **异步处理支持**:Spring MVC支持异步处理请求,允许在不阻塞线程的情况下执行耗时的操作,从而提高系统性能。 10. **国际化和本地化**:通过消息源和LocaleResolver,Spring MVC可以轻松实现应用的多语言支持...

    spring-webmvc.jar

    spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载spring-webmvc-4.jar 下载

Global site tag (gtag.js) - Google Analytics