大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > SpringMVC学习之异常处理

SpringMVC学习之异常处理

关键词:SpringMVC异常处理  阅读(899) 赞(14)

[摘要]本文是对SpringMVC学习之异常处理的讲解,对学习Java编程技术有所帮助,与大家分享。

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

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

这样就完成了异常的捕获和处置。

二.我们引见了第一种捕获处置异常方式,但是第一种方式需求在配置文件中中止配置,有的时分我们会觉得配置文件内容太多太乱,那么我们就可以借助@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



相关评论