SpringMvc學習筆記(十)異常處理專題
遇見異常跳轉到自己設定的頁面,註解方式處理區域性異常,監聽Controller類的全域性異常處理,springmvc配置統一的簡單異常處理,監聽所有的頁面異常
1.專案結構
2.區域性異常處理
ExceptionDemoController.java
package com.hs.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* 經典異常處理_註解方式
*/
@Controller
public class ExceptionDemoController {
@GetMapping("/ex01")
public String test01() {
int i = 10 / 0; //會報這個錯誤Request processing failed; nested exception is java.lang.ArithmeticException: / by zero
return "jsp/result" ;
}
/**
* 註解方式,處理異常,程式遇見這個異常,就會執行註解裡的內容,
*作用範圍只有本類有效!!!
* @return
*/
//裡面可以寫多個異常,用,隔開,,,其實也可以總的寫一個異常Exception,class
@ExceptionHandler(value = {ArithmeticException.class})
public ModelAndView exception01(ArithmeticException ex) {
ModelAndView mav = new ModelAndView();
mav.addObject("ex" , ex);
mav.setViewName("jsp/error");
return mav;
}
}
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>${requestScope.message}</h2>
<a href="javascript:void(0)" id="debug">[DEBUG]</a>
<p id="error" style="display: none">
${requestScope.ex}
</p>
<script>
window.onload = function () {
document.getElementById("debug").onclick = function () {
document.getElementById("error").style.display = "block";
}
}
</script>
</body>
</html>
[email protected]監聽所有Controller類的異常
ExceptionAllController.java
package com.hs.web;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.Map;
/**
* ControllerAdvice這個表示監聽只要有Controller的類的異常,同樣如果自身類有註解監聽,滿足誰近就執行誰的原則
*/
@ControllerAdvice
public class ExceptionAllController {
/**
* 監聽Controller類的異常方式一
*
* @param ex
* @return
*/
@ExceptionHandler(value = {Exception.class})
public ModelAndView exception01(Exception ex) {
ModelAndView mav = new ModelAndView();
mav.addObject("ex", ex);
mav.setViewName("jsp/error02");
return mav;
}
}
ExceptionDemoController.java把上面那個區域性處理異常註釋就行,
error02.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
本頁是全域性的異常監聽跳轉頁面,本次監聽到的異常是
${requestScope.ex}
</body>
</html>
4.springmvc.xml配置簡單處理異常
springmvc.xml加入
<!--6.統一的簡單異常處理,監聽所有的頁面異常-->
<bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--出現異常,預設跳轉的頁面-->
<property name="defaultErrorView" value="jsp/error"/>
<!--類似於這個mav.addObject("ex", ex);-->
<property name="exceptionAttribute" value="ex"/>
<!--異常對映,若出現下列異常,就跳轉相應的頁面,不跳預設的-->
<property name="exceptionMappings">
<props>
<prop key="ArithmeticException">jsp/error</prop>
<prop key="ArrayIndexOutOfBoundsException">jsp/error</prop>
<prop key="RuntimeException">jsp/error</prop>
<prop key="Exception">jsp/error</prop>
</props>
</property>
</bean>
5.自定義處理異常
ExceptionAllController.java
/**
* 監聽Controller類的異常方式二自定義異常
* @param ex
* @param model
* @return
*/
@ExceptionHandler(value = {Exception.class})
public String exception02(Exception ex, Model model) {
//判斷類的型別
if (ex instanceof ArrayIndexOutOfBoundsException) {
model.addAttribute("message", "陣列越界異常");//給客戶看的
model.addAttribute("ex", ex);
// return "jsp/error";
}
if (ex instanceof ArithmeticException) {
model.addAttribute("message", "運算異常"); //給客戶看的
model.addAttribute("ex", ex);
// return "jsp/error";
}
//處理自定義異常
return "jsp/error";
}
/**
* 監聽Controller類的異常方式二自定義異常____返回json格式
* @param ex
* @return
*/
@ExceptionHandler(value = {Exception.class})
@ResponseBody
public Map<String,Object> exception03(Exception ex) {
Map<String, Object> map = new HashMap<String,Object>();
//判斷類的型別
if (ex instanceof ArrayIndexOutOfBoundsException) {
map.put("message", "陣列越界異常");//給客戶看的
map.put("ex", ex);
// return "jsp/error";
}
if (ex instanceof ArithmeticException) {
map.put("message", "運算異常"); //給客戶看的
map.put("ex", ex);
// return "jsp/error";
}
//處理自定義異常
return map;
}
result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
沒有遇見註解裡的異常,成功跳轉
</body>
</html>
相關推薦
SpringMvc學習筆記(十)異常處理專題
遇見異常跳轉到自己設定的頁面,註解方式處理區域性異常,監聽Controller類的全域性異常處理,springmvc配置統一的簡單異常處理,監聽所有的頁面異常 1.專案結構 2.區域性異常處理 ExceptionDemoControll
springmvc學習筆記(29)——HandleException處理異常
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
《瘋狂Java講義》學習筆記(九)異常處理
1、異常概述 異常機制已經成為判斷一門程式語言是否成熟的標準,目前主流的程式語言都提供了成熟的異常機制,增加了異常處理機制後的程式有更好的容錯性,更加健壯 Java的異常機制主要依賴於:try、catch、finally、throws和throw Java7
JNI學習筆記(七)——異常處理
我們已經碰到過在一個JNI函式呼叫後,native程式碼進行錯誤檢查的情形。本節解釋native程式碼如何從這些錯誤條件中檢查和恢復。 我們將關注發生錯誤的JNI函式呼叫上(而不是native程式碼上的二進位制錯誤)。如果一個native方法有呼叫了一個系統呼叫,只需要簡
SpringMVC學習筆記(十)——包裝型別pojo、陣列、集合的引數繫結
部落格原始碼下載:戳我一下 一、包裝型別pojo引數繫結 需求: 商品查詢controller方法中實現商品查詢條件傳入。 1、包裝型別的pojo public class Ite
springmvc學習筆記(30)——@ResponseStatus註解處理異常
一、ResponseStatus修飾類 ResponseStatus註解的使用非常簡單,我們建立一個異常類,加上註解 import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotat
springmvc學習筆記(33)——SimpleMappingExceptionResolver異常對映 XML檔案配置
SimpleMappingException異常對映 當異常發生時,我們可以將它對映到我們指定的介面 在springmvc中配置 <!-- 配置使用 SimpleMappingExceptionResolver 來對映異常 -->
springmvc學習筆記(30)——SimpleMappingExceptionResolver異常對映
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Python學習筆記(十)——處理Excel電子表格
安裝openpyxl模組 pip install openpyxl 讀取Excel檔案 用openpyxl模組開啟Excel文件 >>> wb = openpyxl.load_workbook('temp.x
springmvc學習筆記(一) -- 從零搭建,基礎入門
out hand char webapp core localhost list ges del 1、新建maven項目 參考mybatis學習筆記(五) -- maven+spring+mybatis從零開始搭建整合詳細過程(上)第一部分,修改配置 2、修
如鵬網學習筆記(十)DOM
check 名稱 元素節點 n) mousedown 通過 name 邏輯 css DOM筆記一、DOM簡介 Document Object Model 文檔對象模型 DOM的節點樹模型:整個文檔按照從大到小的節點劃分,每一個內容都算作一個節點 DOM API
Python學習筆記(十)
類型 property 獲取 bsp 構造 屬性 增加 函數類 pro 一、類和構造函數的定義 class 類名(object): def __init__(self,name,score): self.name = name self.sco
Ionic3學習筆記(十)實現夜間模式功能
gpa 效果 app code fff eat ext images provider 本文為原創文章,轉載請標明出處 目錄 創建主題樣式 導入 variables.scss 創建 provider 創建 page 在 App 入口處應用主題 效果圖 1. 創建主題樣式
Elasticsearch學習筆記(十)批量查詢mget、批量增刪改bulk
出錯 color body 換行 nor test 增刪 doc document 一、批量查詢 mget GET /_mget { "docs":[ { "_index":"ecommerce
day5-Python學習筆記(十)常用模塊
stat 結果 fig .get 文件顯示 刪除空文件 conf std 分割 import os# print(os.getcwd())#取當前工作目錄# print(os.chdir("..")) # 更改當前目錄# print(os.getcwd())#取當前工作目
《Qt5 開發與實例(第三版)》學習筆記(十)
fix row tac person als new .cpp exec constrain 1 // 3.5 『綜合實例』 修改用戶資料 2 //main.cpp 3 #include "content.h" 4 #include <QApplic
SpringBoot學習筆記(5):處理前端JSON返回的日期的格式
處理 date() ring row 學習筆記 post 直觀 val rtt SpringBoot學習筆記(4):處理前端JSON返回的日期的格式 問題描述 前端頁面顯示的時間為毫秒格式,不利於直觀顯示! 解決方法1——後端解決 public class Flow
ASP.NET Core 2 學習筆記(十)視圖
部分 合成 cati 分享 col script text var AC ASP.NET Core MVC中的Views是負責網頁顯示,將數據一並渲染至UI包含HTML、CSS等。並能痛過Razor語法在*.cshtml中寫渲染畫面的程序邏輯。本篇將介紹ASP.NET Co
官網英文版學習——RabbitMQ學習筆記(十)RabbitMQ集群
sign 新版本 兩種 height node 停止 clas 普通模式 簡單 在第二節我們進行了RabbitMQ的安裝,現在我們就RabbitMQ進行集群的搭建進行學習,參考官網地址是:http://www.rabbitmq.com/clustering.
Rx 學習筆記(8)錯誤處理和 To 操作符
con 錯誤處理 操作 operator 處理 opera erro per tor Error Handling Operators Catch Retry Operators to Convert Observables ToRx 學習筆記(8)錯誤處理和 To 操作符