1. 程式人生 > >Whitelabel Error Page(2)之Internal Server Error

Whitelabel Error Page(2)之Internal Server Error

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Sep 07 17:27:34 CST 2017
There was an unexpected error (type=Internal Server Error, status=500).
No message available

功能:

從頁面的url中手動輸入使用者名稱和密碼,來驗證是否可以登入

訪問路勁url

出錯原因

例項如下:

正確的url:

返回我們想看到的200成功的頁面:
這裡寫圖片描述

不正確的url(1) —– 傳入的引數password寫成pass

返回我們很害怕的錯誤頁面
這裡寫圖片描述

不正確的url(2) —– 密碼錯誤導致的404錯誤頁面

返回我們不喜歡的404錯誤頁面
這裡寫圖片描述

程式碼塊

@RestController
@RequestMapping("/status")
public class StatusController {
    private String username = "admin";
    private String password = "123";

    @RequestMapping(value =
"") public JsonResult getStatus(HttpServletRequest request, HttpServletResponse response, @RequestParam Map<String,String> map){ if(map.get("username").equals(username) && map.get("password").equals(password)){ return new JsonResult(StatusCode.SUCCESS.getCode(),StatusCode.
SUCCESS.getMessage(),new Date()); }else{ return new JsonResult(StatusCode.ERROR.getCode(),StatusCode.ERROR.getMessage(),new Date()); } } }

程式碼解釋:

1. 根據以上程式碼塊,可以看出在訪問的路勁url中的引數username和password將會傳給後臺的程式碼,而後臺是以map來儲存前臺傳入的引數username和password

2. 就是說,我們在頁面輸入的username=某個值和passowrd=某個值將會存到map中,而當我們獲取這些值需要從map中來獲取

3. 由於map是以鍵值對儲存的,就是說url訪問路勁中username=admin,那麼key存的是username這個變數名,而value存的是admin。即

map:
key: username
value:admin

map:
key:password
value:123

所以當我們訪問url時,url中傳入的引數變數名必須與程式碼中get獲取的key變數名相等(map.get(“username”)),即在http://localhost:8080/status?username=admin&password=123 中的username和password不能隨便亂寫,是程式碼中定義好的,否則報伺服器內部錯誤,即程式碼問題

4. 當訪問url時,type = Internal Server Error,在後臺IDEA 也會看到執行時錯誤資訊,如下:
這裡寫圖片描述

空指標異常,這種錯誤就是物件為null,所以從報錯提示中的程式碼行可以判斷為null的物件有三個可能性。
1. map
2. map.get(“username”)
3. map.get(“password”)
map不可能為null,map是介面,直接可以呼叫方法
map.get(“username”),檢視訪問路勁url,有username欄位,所以也不可能為Null
map.get(“password”),檢視訪問路勁url*,沒有password欄位,只是有pass欄位,所以map.get(“password”)為null

 if(map.get("username").equals(username) && map.get("password").equals(password)){

判斷空指標異常第二種方法 – debug
設定斷點
這裡寫圖片描述

這裡寫圖片描述

錯誤總結

type=Internal Server Error 這種錯誤後臺執行時會報錯

type=Internal Server Error 出現的可能性:
1. 程式碼的問題,需要修改程式碼。
2. 前臺頁面傳入的資料與後臺程式碼不吻合。