文档章节

SpringMVC学习(10):异常处理

乐在克里特
 乐在克里特
发布于 2017/02/23 14:45
字数 603
阅读 3
收藏 0

在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的。那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容—>异常处理。

在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>

 

运行项目:

1

可以看到异常已经被捕捉并显示,这样只要把我们的其它的Controller全部继承于BaseController就能实现异常的集中捕捉和处理了。

代码下载:http://pan.baidu.com/s/1c0eTseG

 

http://www.cnblogs.com/liukemng/p/3753117.html

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 16
博文 268
码字总数 394729
作品 0
杭州
程序员
私信 提问
Spring Boot整合MyBatis学习总结

公司的很多项目都陆陆续续引入了Spring Boot,通过对Spring Boot的接触了解发现其真的是大大地简化了开发、简化了依赖配置,很多功能注解一下就可以实现,真的是太方便了。下面记录了一个Spr...

zhuwensheng
06/29
0
0
Spring Batch管理平台

Spring Batch框架出现,降低了开发人员自行编写批处理框架的难度,同时,也让开发人员更加集中于业务逻辑的处理。但是,Spring Batch框架的掌握并非易事,主要集中在:1、技术资料太少;2、S...

我可梦
2016/04/11
2
0
使用Spring MVC统一异常处理实战

使用Spring MVC统一异常处理实战 1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需...

庸夫俗子
2015/03/05
0
0
白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,我们...

oKong
10/17
0
0
spring mvc 统一异常处理,spring security 对 AuthenticationException 异常处理失效

因配置了 spring mvc 统一异常处理,导致了 spring security 对 AuthenticationException 异常处理失效,原本用 spring security 来实现的 登入检查,权限检查 均被 spring mvc 处理掉了。 ...

LucEsape
2016/02/23
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

控制台打印图片

function dev(){ if (window.console){ console.log("%c\n ", "font-size:100px;background:url('http://gmcyzs.com/resources/images/logo.png') no-repeat"); console.log('%c 深务平台,\......

羊皮卷
14分钟前
0
0
MyBaties的二级缓存

二级缓存介绍 在上文中提到的一级缓存中,其最大的共享范围就是一个SqlSession内部,那么如何让多个SqlSession之间也可以共享缓存呢,答案是二级缓存。 当开启二级缓存后,会使用CachingExec...

嘴角轻扬30
15分钟前
2
0
10.新增博客功能-结束语---《Beetl视频课程》

本期视频实现发布新博客功能 一起学beetl目录:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK 教程进入了尾声,该讲的知识点基本讲到了,本节课不会讲新的知识点。...

Gavin-King
19分钟前
3
0
SpringBoot项目热部署

IntelliJ IDEA开发工具 1.需要在pom.xml文件中加入以下依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> ......

llsydn
21分钟前
2
0
JVM问题排查也不是很难--工具使用

目录 概述 环境准备 工具介绍 远程连接方式 开启JMX 工具远程连接 参考文献 概述 线上环境中,程序越来越慢,一头雾水?遇到程序经常宕机,但找不到原因?排查问题却经常记不住命令? 那是没找到好...

java_龙
25分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部