JavaWeb Servlet Http協議 HttpServletRequest

澄清石灰水t發表於2020-12-31

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是一個工具類,列印陣列方便
  }

}

 

相關文章