1. 程式人生 > 其它 >JavaWeb-03-Servlet-08-Http狀態碼

JavaWeb-03-Servlet-08-Http狀態碼

JavaWeb-03-Servlet-08-Http狀態碼

1.狀態碼介紹

1.狀態碼是由三位數字組成的符號。

2.Http伺服器在推送響應包前,根據本次請求處理情況,將Http狀態碼寫入到響應包裡的【狀態行】上。

3.如果Http伺服器針對本次請求,返回了對應的資原始檔,那麼就通過Http狀態碼通知瀏覽器該如何處理這個結果;

如果Http伺服器針對本次請求,沒有返回對應的資原始檔,那麼就通過Http狀態碼向瀏覽器解釋不能返回的原因。

2.狀態碼分類

2.1狀態碼分為五個大類

狀態碼的組成:[100-599],以第一個數字為區分,分為5個大類。

2.2 【1XX】

其中最具特徵的是:100

作用:通知瀏覽器,本次返回的資原始檔並不是一個獨立的完整資原始檔,需要瀏覽器在接收到響應包後,繼續向Http伺服器請求所依賴的其他資原始檔。

例:

比如百度的頁面,在傳送請求時,伺服器返回一個html檔案。

這個html中包含很多圖片等其他元素,而這些元素是作為獨立的資原始檔儲存在網站中的,只是在html中引用它們。所以,在伺服器傳送響應包時,會在狀態行中寫入100。

瀏覽器在接收到響應包後,發現狀態碼為100,就會得知接收到的不是一個完整的資原始檔。

然後會根據命令自動向伺服器索要缺失的圖片檔案。

2.3【2XX】

最具特徵的是:200

作用:通知瀏覽器,本次返回的資原始檔是一個完整的獨立資原始檔。瀏覽器在接收到之後,不需要再索要其他關聯檔案。

2.4【3XX】

最具特徵的是:302

作用:通知瀏覽器,本次返回的不是一個資原始檔,而是一個資原始檔地址,需要瀏覽器根據這個地址自動發起請求。

如何實現:

response.sendRedirect("資原始檔地址"); ------> 【響應頭】location

這個行為會導致伺服器將302狀態碼寫入到狀態行。

演示:

新建一個網站MyWeb,新建一個Servlet介面實現類OneServlet,在該類中,重寫doGet方法

在該方法中,呼叫響應物件,將百度地址寫入響應頭中的【location】屬性。

package com.tsccg.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: TSCCG
 * @Date: 2021/08/16 16:59
 */
public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String address = "http://www.baidu.com";
        response.sendRedirect(address);
    }
}

Tomcat在推送響應包之前,發現響應體中內容為空,但是響應頭的location中卻存放了一個地址,
Tomcat就會把302狀態碼寫入到響應包的狀態行中

釋出網站,開啟Tomcat伺服器,在瀏覽器中訪問OneServlet類,開啟F12,檢視網路:

瀏覽器在接收到響應包後,發現狀態碼為302,就不會讀取響應體中的內容。

會根據location中的地址發起第二次請求。

2.5【4XX】

2.5.1【404】

作用:通知瀏覽器,服務端沒有定位到被訪問的資原始檔,無法提供幫助。

2.5.2【405】

作用:通知瀏覽器,在服務端已經定位到被訪問的資原始檔【必須是Servlet】了,但是這個Servlet對於瀏覽器的【請求方式】無法處理。

就比如在Servlet介面實現類裡只重寫了doPost方法,這個類只能處理post方式的請求。

如果此時,在瀏覽器中通過get方式請求訪問這個Servlet介面實現類,這個類就無法處理這個請求。

Tomcat伺服器就會在響應包的狀態行裡寫入405。

2.6【5XX】

最具特徵的:500

作用:通知瀏覽器,在服務端已經定位到了被訪問的資原始檔【Servlet】。但是在Servlet處理當前請求時,由於Java異常而導致處理失敗。

演示:

新建一個網站MyWeb,新建一個Servlet介面實現類OneServlet,在該類中,重寫doGet方法

在該方法中,放入一個異常。

package com.tsccg.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: TSCCG
 * @Date: 2021/08/16 17:41
 */
public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map map = new HashMap();
        int num = (int)map.get("key1");//空指標異常,int型別無法儲存null
        /*
        修改方案:
        Integer num2 = (Integer)map.get("key1");//所有引用型別都可以儲存null
        response.getWriter().print(num2);
        */

    }
}