1. 程式人生 > >spring系統學習--spirngMVC之異常處理

spring系統學習--spirngMVC之異常處理

   本篇內容記錄一下springMVC的異常處理內容。  環境是:springmvc環境搭建

過程如下: 

       1,將錯誤處理的bean類註冊到上下文中。  該bean需要實現一個介面:

   可見,它是spring-webmvc提供的一個介面。  也是web的  : 異常處理的 源頭!

    在spring-mvc.xml加入: (實際上,只要能夠完成上下文注入這個要求,寫在哪裡都無所謂,註解也好,配置也好)。

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!-- 定義預設的異常處理頁面 -->
        <property name="defaultErrorView" value="defaulterror"/>
        <!-- 定義異常處理頁面用來獲取異常資訊的變數名,也可不定義,預設名為exception -->
        <property name="exceptionAttribute" value="ex"/>
        <!-- 定義需要特殊處理的異常,這是重要點 -->
        <property name="exceptionMappings">
            <props>
                <prop key="com.automannn.springMVC_practice.exception.MyException">myerror</prop>
            </props>
            <!-- 還可以定義其他的自定義異常 -->
        </property>
    </bean>

  這是spring-webmvc提供的預設實現。  它為我們預留了一些簡單配置的地方: 屬性exceptionMappings即可完成要求。 在本次實驗中我自定義了一個異常:(需要注意的是,這個檢視配置的路徑也是基於檢視解析路徑的。 也就是要使用檢視解析器配置的字首和字尾)

package com.automannn.springMVC_practice.exception;

/**
 * @author [email protected]
 * @time 2018/11/8 11:20
 */
public class MyException extends Exception {

    public MyException(String msg){
        super(msg);
    }
}

2.配置相關檢視頁面

     本次實驗,我隨便配置了幾個。

<%--
  Created by IntelliJ IDEA.
  User: 14394
  Date: 2018/11/8
  Time: 11:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>defaulterror</title>
</head>
<body>
 This is deafault error!
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: 14394
  Date: 2018/11/8
  Time: 11:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>error</title>
</head>
<body>
  This is my error page!
</body>
</html>

    它們位於:

3.新建能丟擲該異常的源控制器,以測試自定義的異常處理

   

package com.automannn.springMVC_practice.controller;

import com.automannn.springMVC_practice.exception.MyException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;

/**
 * @author [email protected]
 * @time 2018/11/8 11:21
 */
@Controller
public class ExceptionController {
    @GetMapping("/testException")
    public void testException() throws MyException {
        throw new MyException("測試");
    }

    @GetMapping("/testGlobalException")
    public void testGlobalException() throws Exception {
        throw new Exception("測試");
    }
}

4.測試

   執行伺服器:

  然而:我們會發現這樣一個頁面:

   因為狀態的這個部分是伺服器容器的功能。 而spring-webmvc是基於伺服器容器的。