目錄 1. HTTP協議 2. HttpServlet 內容 HTTP 什麼是HTTP協議 HTTP 協議一般指 HTTP(超文本傳輸協議)。超文本傳輸協議(英語:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分散式、協作式和超媒體信息系統的應用層協議,是網際網路上 ...
目錄
內容
HTTP
- 什麼是HTTP協議
HTTP 協議一般指 HTTP(超文本傳輸協議)。超文本傳輸協議(英語:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分散式、協作式和超媒體信息系統的應用層協議,是網際網路上應用最為廣泛的一種網路傳輸協議,所有的 WWW 文件都必須遵守這個標準。HTTP 是為 Web 瀏覽器與 Web 伺服器之間的通信而設計的,但也可以用於其他目的。HTTP 是一個基於 TCP/IP 通信協議來傳遞數據的(HTML 文件、圖片文件、查詢結果等)。
- HTTP請求消息
- HTTP請求類型
根據 HTTP 標準,HTTP 請求可以使用多種請求方法。HTTP1.0 定義了三種請求方法: GET, POST 和 HEAD 方法。HTTP1.1 新增了六種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。目前使用比較廣泛的是HTTP1.1。
1. GET 請求指定的頁面信息,並返回實體主體。
2. POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會導致新的資源的建立和/或已有資源的修改。
3. HEAD 類似於 GET 請求,只不過返回的響應中沒有具體的內容,用於獲取報頭。
4. PUT 從客戶端向伺服器傳送的數據取代指定的文檔的內容。
5. DELETE 請求伺服器刪除指定的頁面。
6. CONNECT HTTP/1.1 協議中預留給能夠將連接改為管道方式的代理伺服器。
7. OPTIONS 允許客戶端查看伺服器的性能。
8. TRACE 回顯伺服器收到的請求,主要用於測試或診斷。
9. PATCH 是對 PUT 方法的補充,用來對已知資源進行局部更新 。
雖然有九個請求方法,但是實際開發過程中使用比較多的是GET和POST。
- HTTP響應消息
HTTP響應消息是向客戶端提供請求的結果。結構如下:
- HTTP 響應狀態碼
HTTP 響應狀態碼用來表明特定 HTTP 請求是否成功完成。 響應被歸為以下五大類:
1. 信息響應 (100–199)
2. 成功響應 (200–299)
3. 重定向消息 (300–399)
4. 客戶端錯誤響應 (400–499)
5. 服務端錯誤響應 (500–599)
狀態碼比較多,但是實際開發過程中遇到的比較多的是200,404,500等。
HttpServlet
HttpServlet是Servlet介面的實現類。主要用來處理HTTP請求。HttpServlet的doXxx方法是用來處理此類請求的。比如doGet方法處理GET請求。每個方法有兩個HttpServletRequest和HttpServletResponse類型的參數。
package com.example.aji.servlet;
import com.alibaba.fastjson2.JSONObject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
HttpServletRequest
- getHeader(param) 獲取請求頭中param參數對應的值。例:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String token = req.getHeader("token");
System.out.println(token);
}
- getParameter(param) 獲取請求行中param參數對應的值。例:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String token = req.getHeader("token");
System.out.println(token);
String username = req.getParameter("username");
System.out.println(username);
}
- 更多方法自行測試
HttpServletResponse
- .getWriter() 獲取一個PrintWriter對象,通過PrintWriter對象的write()方法想返回給前端的數據寫進HttpServletResponse的響應體中。例:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String token = req.getHeader("token");
System.out.println(token);
String username = req.getParameter("username");
System.out.println(username);
String password = req.getParameter("password");
resp.getWriter().write(username);
}
- .setStatus(statuscode) 設置響應碼。例:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String token = req.getHeader("token");
System.out.println(token);
String username = req.getParameter("username");
System.out.println(username);
String password = req.getParameter("password");
//resp.getWriter().write(username);
//HttpServletResponse.SC_INTERNAL_SERVER_ERROR的值等於500
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}