日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Request(HTTP请求对象)的笔记和底层原理

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Request(HTTP请求对象)的笔记和底层原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Request筆記以及底層原理

    • 1.HTTP協議
    • 2.學會識別請求
    • 3.Request請求對象
    • 4.Request是域對象
    • 5.使用域對象進行數據傳遞(請求轉發)
    • 6.Request底層原理圖

1.HTTP協議

  • 什么是HTTP協議:超文本協議
  • 作用:是客戶端和服務端交互時,數據的格式規范
  • 分類:HTTP請求和HTTP響應
    請求:客戶端發送給服務端的數據
    響應:服務端發送給客戶端的數據
  • 請求和響應分為行,頭,體
    注意:先有請求后有響應,沒有請求就沒有響應
  • 2.學會識別請求


    2.1 請求行

    • 本次請求的基本信息
    • 格式:請求方式 請求資源 協議版本
    • 例如POST /day29/demo01 HTTP/1.1

    2.2 請求頭

    • 本次請求的附加信息
    • 格式:一行一個鍵值對,一個鍵值對是一個請求頭,一次請求可以有多個請求頭
    • 例如:Referer:http://localhost:8080/day29/_01http.html

    2.3 請求體

    • 本次請求的正文數據,是提交的表單參數
    • 格式:表單數據的提交格式 name=value&name=value&…
    • 例如:username=lisi
    • 注意:只有是POST提交,必須有帶name屬性的表單項,這時候請求體里才有數據;否則沒有請求體

    3.Request請求對象

    3.1 獲取請求行的數據

    獲取請求方式數據

    • 語法:Request對象.getMethod():
    • 方法返回對應的請求方式字符串 (常見的請求方式 get/post)
    • 一般默認請求方式都是get,只有指定了post才會有post請求

    獲取請求行中項目路徑

    • 語法:Request對象.getContextPath();
    • 方法返回對應的項目路徑字符串

    獲取客戶端IP

    • 語法:Request對象.getRemoteAddr();
    • 方法返回訪問客戶的IP地址

    3.2 獲取請求頭的數據

    獲取指定請求頭的值

    • 語法:Request.getHeader(鍵)
    • 在請求頭中,數據以鍵值對的方式進行存儲,傳入鍵,獲取值

    獲取所有請求頭的值

    • 語法:Request.getHeaderNames()
    • 以枚舉對象的形式,返回所有請求頭的值.
    • 循環遍歷

    獲取請求體的數據

    • 獲取單值參數:String value = request.getParameter(標簽體的name屬性)

    • 獲取多值參數:String[] values = request.getParametreValues(標簽體的name屬性)

    • 獲取所有參數:Map<String, String[]> map = request.getParameterMap()

      獲取表單數據出現亂碼問題
      1.Get方式不會出現亂碼,因為Tomcat 8版本以上的為我們解決了。
      2.Post方式則會出現亂碼問題:
      一切亂碼原因都是因為解碼和編碼方式不同

    • request默認采用iso-8859字符集解碼,而我們的頁面是utf-8字符集編碼

    • 解決方法:修改解碼方式,語法:Request.setCharacterEncoding(“utf-8”)

    • 注意:必須在接收參數之前執行

    4.Request是域對象

    • 由Servlet規范提供的,能夠存取數據的對象,在其作用范圍里可以共享數據。
    • 不同域對象的區別:作用范圍不同
    • 域對象存取數據的方法:
      • 存數據:setAttribute(String name, Object value)
      • 取數據:getAttribute(String name)
      • 刪數據:removeAttribute(String name)

    request域對象的作用范圍:

    • 何時創建:一次請求開始
    • 何時銷毀:一次請求結束
    • 作用范圍:一次請求期間

    5.使用域對象進行數據傳遞(請求轉發)

    原理圖:
    servletContext域對象也可以存放數據,但是會一直存在內存中,消耗內存,而Request結束時就會銷毀。

    5.1 請求跳轉的使用

    //獲取請求轉發器 RequestDispatcher rd = request.getRequestDispatcher(String path); //執行請求轉發跳轉 rd.forward(request, response);

    注意:

    • 重定向跳轉時,跳轉的路徑前要加:項目路徑。因為重定向是瀏覽器跳轉,是應用外跳轉
    • 請求轉發跳轉時,跳轉的路徑前不要加項目路徑。因為請求轉發是服務器跳轉,是應用內跳轉

    5.2 重定向和請求轉發的區別【面試題】

    • 重定向跳轉:有兩次請求;請求轉發:有1次請求
    • 重定向跳轉:瀏覽器地址欄會變;請求轉發:地址欄不變
    • 重定向跳轉:是客戶端(瀏覽器)跳轉;請求轉發:是服務端跳轉

    5.3 請求轉發和重定向的應用場景

    • 跳轉時,如果有數據要傳遞給下一個資源,要使用請求轉發跳轉:
      • 把數據放到request對象里
      • 請求轉到下一個資源,把request對象傳遞過去
    • 跳轉時,如果沒有數據要傳遞給下一個資源,可以使用重定向跳轉

    6.Request底層原理圖

    總結

    以上是生活随笔為你收集整理的Request(HTTP请求对象)的笔记和底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。