JavaWeb Servlet Http協議 HttpServletRequest
1、HTTP協議
1.1 HTTP協議概述
所謂HTTP 協議,就是指,客戶端和伺服器之間通訊時,傳送的資料,需要遵守的規則,叫HTTP 協議。
HTTP 協議中的資料又叫報文。
1.2 HTTP協議格式
客戶端給伺服器傳送資料叫請求。伺服器給客戶端回傳資料叫響應。
請求又分為GET 請求,和POST 請求兩種
1.2.1 GET請求
(1)請求行
請求的方式 | GET |
請求的資源路徑 | 工程路徑+【?+請求引數】 |
請求的協議版本號 | HTTP/1.1 |
(2)請求頭
key:value 組成 不同的鍵值對,表示不同的含義
exp:示例
前端程式碼
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/06_servlet/hello2" method="get">
<input type="submit">
</form>
</body>
</html>
在IE輸入訪問該前端頁面,http://localhost:8080/06_servlet/a.html 點選submit 選擇除錯工具, 即可看到伺服器請求和響應
1.2.2 POST請求
(1)請求行
請求的方式 | POST |
請求的資源路徑 | 工程路徑+【?+請求引數】 |
請求的協議版本號 | HTTP/1.1 |
(2)請求頭
key:value 不同請求頭,有不同的含義
空行
(3)請求體
===>>> 就是傳送給伺服器的資料
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/06_servlet/hello2" method="post">
<input type="hidden" name="action" value="login" />
<input type="hidden" name="username" value="root" />
<input type="submit">
</form>
</body>
</html>
在IE輸入訪問該前端頁面,http://localhost:8080/06_servlet/a.html 點選submit 選擇除錯工具, 即可看到伺服器請求和響應
附錄1:常用的請求頭
Accept | 表示客戶端可以接收的資料型別 |
Accpet-Languege | 表示客戶端可以接收的語言型別 |
User-Agent | 表示客戶端瀏覽器的資訊 |
Host | 表示請求時的伺服器ip 和埠號 |
附錄2:哪些是GET請求,哪些是POST請求
(1)GET請求
① form 標籤method=get
② a 標籤
③ link 標籤引入css
④ Script 標籤引入js 檔案
⑤ img 標籤引入圖片
⑥ iframe 引入html 頁面
⑦ 在瀏覽器位址列中輸入地址後敲回車
(2)POST請求
只有:form 標籤method=post
1.3 響應的HTTP協議格式
(1)響應行
① 響應的協議和版本號
② 響應狀態碼
③ 響應狀態描述符
(2)響應頭
key : value 不同的響應頭,有其不同含義
空行
(3)響應體---->>> 就是回傳給客戶端的資料
- 響應演示
在IE輸入訪問該前端頁面,http://localhost:8080/06_servlet/a.html?a=ads 提交後,即可收到伺服器響應 選擇除錯工具, 即可看到伺服器請求和響應
附錄1 常見的響應碼說明
響應碼 | 說明 | exp |
200 | 請求成功 | |
302 | 請求重定向(明天講) | |
404 | 請求伺服器已經收到了,但是你要的資料不存在(請求地址錯誤) | |
500 | 伺服器已經收到請求,但是伺服器內部錯誤(程式碼錯誤) | 比如你在serlvet介面實現類的程式碼裡面寫的程式碼有異常,就會返回500錯誤 |
附錄2 MIME 型別說明
MIME 是HTTP 協議中資料型別。
MIME 的英文全稱是"Multipurpose Internet Mail Extensions" 多功能Internet 郵件擴充服務。MIME 型別的格式是“大型別/小型別”,並與某一種檔案的副檔名相對應。
常見的MIME型別:
檔案 | MIME型別 | 副檔名 |
超文字標記語言文字 | text/html | .html,.htm |
普通文字 | txt/plain | .txt |
RTF文字 | application/rtf | .rtf |
GIF圖形 | image/gif | .gif |
JPEG圖形 | image/jpeg | .jpeg,.jpg |
au 聲音檔案 | audio/basic | .au |
MIDI音樂檔案 | audio/midi,audio/x-midi | .mid,.midi |
RealAudio 音樂檔案 | audio/x-pn-realaudio | .ra, .ram |
MPEG檔案 | video/mpeg | .mpg,.mpeg |
AVI檔案 | video/x-msvideo | .avi |
GZIP檔案 | application/x-gzip | .gz |
TAR檔案 | application/x-tar | .tar |
1.4 檢視HTTP協議,以谷歌瀏覽器為例
開啟谷歌瀏覽器F12 進入除錯模式。選擇Network,輸入網址,頁面提交以後,就可以看到響應和請求
2、HttpServletRequest類
2.1 HttpServletRequest有什麼作用
每次只要有請求進入Tomcat 伺服器,Tomcat 伺服器就會把請求過來的HTTP 協議資訊解析好封裝到Request 物件中。然後傳遞到service 方法(doGet 和doPost)中給我們使用。我們可以通過HttpServletRequest 物件,獲取到所有請求的資訊。
2.2 HttpServletRequest類常用方法
方法名 | 解釋 | 案例 |
getRequestURI() | 獲取請求的資源路徑 | URI=>/07_servlet/requestAPIServlet |
getRequestURL() | 獲取請求的統一資源定位符(絕對路徑) | URL=>http://localhost:9-9-/07_servlet/requestAPIServlet |
getRemoteHost() | 獲取客戶端的ip 地址 | 本機是127.0.0.1 |
getHeader() | 獲取請求頭 | 請求頭上面講過,查表 |
getParameter() | 獲取請求的引數 | 就是獲取html頁面form標籤 input裡面的name屬性的值 |
getParameterValues() | 獲取請求的引數(多個值的時候使用) | 比如多選框的情況 |
getMethod() | 獲取請求的方式 | GET 或者 POST |
setAttribute(key, value) | 設定域資料 | |
getAttribute(key) | 獲取域資料 | |
getRequestDispatcher() | 獲取請求轉發物件 |
2.3 獲取請求引數(客戶端發來的請求)
前端頁面,form表單中,name屬性就是key,使用者輸入進表格文字框裡面的,就是值。現在我們準備通過服務端獲取到這個表單裡面的值。
<body>
<form action="http://localhost:8080/07_servlet/parameterServlet" method="get">
使用者名稱:<input type="text" name="username"><br/>
密碼:<input type="password" name="password"><br/>
興趣愛好:<input type="checkbox" name="hobby" value="cpp">C++
<input type="checkbox" name="hobby" value="java">Java
<input type="checkbox" name="hobby" value="js">JavaScript<br/>
<input type="submit">
</form>
</body>
服務端程式碼(配置從略)
public class ParameterServlet extends HttpServlet{
@Override
protected void doGet() throws ServletException,IOException{
//獲取請求引數
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParamterValues("hobby"); //這個需要用陣列來接收
System.out.println("使用者名稱"+username);
System.out.println("密碼"+password);
System.out.println("興趣愛好"+Arrays.asList(hobby));//Array是一個工具類,列印陣列方便
}
}
相關文章
- 【021】JavaWeb面試題(二):Http協議JavaWeb面試題HTTP協議
- JavaWeb第五講 Web核心基礎之HTTP協議JavaWebHTTP協議
- JavaWEB - ServletJavaWebServlet
- JavaWeb——ServletJavaWebServlet
- JavaWeb基礎(day15)( http + tomcat + servlet + 響應)JavaWebHTTPTomcatServlet
- http協議HTTP協議
- HTTP 協議HTTP協議
- Servlet技術12_HttpServletRequest類ServletHTTP
- 02 前端HTTP協議(圖解HTTP) 之 簡單的HTTP協議前端HTTP協議圖解
- HTTP 協議類HTTP協議
- HTTP協議概述HTTP協議
- 理解http協議HTTP協議
- http協議分析HTTP協議
- HTTP協議(2)HTTP協議
- 小解http協議HTTP協議
- #SpringMVC:使用原生的Servlet API #HttpServletRequest、HttpServletResponse @FDDLCSpringMVCServletAPIHTTP
- HTTP協議之:HTTP/1.1和HTTP/2HTTP協議
- HTTP協議基礎HTTP協議
- HTTP協議詳解HTTP協議
- RPC和 HTTP協議RPCHTTP協議
- 瞭解HTTP協議HTTP協議
- HTTP通訊協議HTTP協議
- HTTP和HTTPS協議HTTP協議
- HTTP 協議圖解HTTP協議圖解
- HTTP2 協議HTTP協議
- 簡述HTTP協議HTTP協議
- Http協議簡介HTTP協議
- 淺談HTTP協議HTTP協議
- HTTP協議簡述HTTP協議
- HTTP 協議簡介HTTP協議
- HTTP協議那些事HTTP協議
- HTTP 協議完全解析HTTP協議
- http協議內容HTTP協議
- Http與Https協議HTTP協議
- Http協議入門HTTP協議
- HTTP協議-HTTP響應報文HTTP協議
- 網路通訊協議-HTTP協議詳解!協議HTTP
- HTTP協議和MQTT協議對比誰更好HTTP協議MQQT