Whitelabel Error Page(2)之Internal Server Error

    • Whitelabel Error Page
      • 功能
      • 访问路劲url
      • 出错原因
      • 实例如下
      • 代码块
      • 代码解释
      • 错误总结

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:
http://localhost:8080/status?username=需要手动输入的值&password=需要手动输入的值

访问路劲url

http://localhost:8080/status?username=admin&pass=123

出错原因

url中传入的参数pass应该改为password,正确的url如下:
http://localhost:8080/status?username=admin&password=123

实例如下:

正确的url:

http://localhost:8080/status?username=admin&password=123

返回我们想看到的200成功的页面:
这里写图片描述

不正确的url(1) —– 传入的参数password写成pass

http://localhost:8080/status?username=admin&pass=123

返回我们很害怕的错误页面
Whitelabel Error Page(2)之Internal Server Error_第1张图片

不正确的url(2) —– 密码错误导致的404错误页面

http://localhost:8080/status?username=admin&password=1

返回我们不喜欢的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 也会看到运行时错误信息,如下:
Whitelabel Error Page(2)之Internal Server Error_第2张图片

空指针异常,这种错误就是对象为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
设置断点
这里写图片描述

Whitelabel Error Page(2)之Internal Server Error_第3张图片

参考:IntelliJ IDEA Debug调试案例一

错误总结

type=Internal Server Error 这种错误后台运行时会报错

type=Internal Server Error 出现的可能性:
1. 代码的问题,需要修改代码。
2. 前台页面传入的数据与后台代码不吻合。

你可能感兴趣的:(error,intellij-调试)