spring系統學習--spirngMVC之異常處理
阿新 • • 發佈:2018-11-19
本篇內容記錄一下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是基於伺服器容器的。