1. 程式人生 > >springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果controller、service、dao拋出此類異常說明是系統預期處理的異常信息。

springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果controller、service、dao拋出此類異常說明是系統預期處理的異常信息。

ansi req -type this spring 進行 name ext code

springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。

1.1 異常處理思路

系統中異常包括兩類:預期異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,後者主要通過規範代碼開發、測試通過手段減少運行時異常的發生。

系統的daoservicecontroller出現都通過throws Exception向上拋出,最後由springmvc前端控制器交由異常處理器進行異常處理,如下圖:

  技術分享圖片

1.2 自定義異常類

為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果

controllerservicedao拋出此類異常說明是系統預期處理的異常信息。

package com.huida.exception;

public class CustomException extends Exception{

    private String message;;
    
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    
//構造函數 public CustomException(String message){ super(message); this.message=message; } }

1.3 自定義異常處理器

package com.huida.exception;

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

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; public class CustomeExceptionReslover implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object, Exception e) { //obj 指定發生異常的地方:包名+類名+方法名(參數) CustomException customException; //如果拋出的是我們自定義的異常則直接轉化 if (e instanceof CustomException) { customException = (CustomException) e; } else { customException = new CustomException("系統錯誤,請聯系管理員"); } ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("error", customException.getMessage()); modelAndView.setViewName("error"); return modelAndView; } }

1.4 錯誤頁面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jstl/core"  prefix="c"%>
<!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>
    您的操作出現的異常是:${error}
</body>
</html>

1.5 異常處理器配置

springmvc.xml中添加:

<!-- 異常處理器 -->
    <bean id="handlerExceptionResolver" class="com.huida.exception.CustomeExceptionReslover">
    </bean>

1.6 異常測試

若商品信息為空,則拋出異常。

//註入Service
    @Autowired
    private ItemService itemService;
    @RequestMapping(value="/list" ,method=RequestMethod.GET)
    //RequestMethod.POST  指定這個方法只可以post方法訪問。
    public ModelAndView itemList() throws Exception{
        
        //調用業務層
        List<Items> list=itemService.list();
        if(null==null){
            throw new CustomException("商品為空");
        }
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("itemList",list);
        modelAndView.setViewName("itemList");
        return modelAndView;
        
    }
    

我們在對list.action進行訪問的時候,由於我們使null==null,所以顯示頁面為:

  技術分享圖片

在Service中拋出異常方法同上。

springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果controller、service、dao拋出此類異常說明是系統預期處理的異常信息。