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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

Request筆記以及底層原理

    • 1.HTTP協(xié)議
    • 2.學(xué)會識別請求
    • 3.Request請求對象
    • 4.Request是域?qū)ο?/li>
    • 5.使用域?qū)ο筮M行數(shù)據(jù)傳遞(請求轉(zhuǎn)發(fā))
    • 6.Request底層原理圖

1.HTTP協(xié)議

  • 什么是HTTP協(xié)議:超文本協(xié)議
  • 作用:是客戶端和服務(wù)端交互時,數(shù)據(jù)的格式規(guī)范
  • 分類:HTTP請求和HTTP響應(yīng)
    請求:客戶端發(fā)送給服務(wù)端的數(shù)據(jù)
    響應(yīng):服務(wù)端發(fā)送給客戶端的數(shù)據(jù)
  • 請求和響應(yīng)分為行,頭,體
    注意:先有請求后有響應(yīng),沒有請求就沒有響應(yīng)
  • 2.學(xué)會識別請求


    2.1 請求行

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

    2.2 請求頭

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

    2.3 請求體

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

    3.Request請求對象

    3.1 獲取請求行的數(shù)據(jù)

    獲取請求方式數(shù)據(jù)

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

    獲取請求行中項目路徑

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

    獲取客戶端IP

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

    3.2 獲取請求頭的數(shù)據(jù)

    獲取指定請求頭的值

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

    獲取所有請求頭的值

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

    獲取請求體的數(shù)據(jù)

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

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

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

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

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

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

    • 注意:必須在接收參數(shù)之前執(zhí)行

    4.Request是域?qū)ο?/h2>
    • 由Servlet規(guī)范提供的,能夠存取數(shù)據(jù)的對象,在其作用范圍里可以共享數(shù)據(jù)。
    • 不同域?qū)ο蟮膮^(qū)別:作用范圍不同
    • 域?qū)ο蟠嫒?shù)據(jù)的方法:
      • 存數(shù)據(jù):setAttribute(String name, Object value)
      • 取數(shù)據(jù):getAttribute(String name)
      • 刪數(shù)據(jù):removeAttribute(String name)

    request域?qū)ο蟮淖饔梅秶?#xff1a;

    • 何時創(chuàng)建:一次請求開始
    • 何時銷毀:一次請求結(jié)束
    • 作用范圍:一次請求期間

    5.使用域?qū)ο筮M行數(shù)據(jù)傳遞(請求轉(zhuǎn)發(fā))

    原理圖:
    servletContext域?qū)ο笠部梢源娣艛?shù)據(jù),但是會一直存在內(nèi)存中,消耗內(nèi)存,而Request結(jié)束時就會銷毀。

    5.1 請求跳轉(zhuǎn)的使用

    //獲取請求轉(zhuǎn)發(fā)器 RequestDispatcher rd = request.getRequestDispatcher(String path); //執(zhí)行請求轉(zhuǎn)發(fā)跳轉(zhuǎn) rd.forward(request, response);

    注意:

    • 重定向跳轉(zhuǎn)時,跳轉(zhuǎn)的路徑前要加:項目路徑。因為重定向是瀏覽器跳轉(zhuǎn),是應(yīng)用外跳轉(zhuǎn)
    • 請求轉(zhuǎn)發(fā)跳轉(zhuǎn)時,跳轉(zhuǎn)的路徑前不要加項目路徑。因為請求轉(zhuǎn)發(fā)是服務(wù)器跳轉(zhuǎn),是應(yīng)用內(nèi)跳轉(zhuǎn)

    5.2 重定向和請求轉(zhuǎn)發(fā)的區(qū)別【面試題】

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

    5.3 請求轉(zhuǎn)發(fā)和重定向的應(yīng)用場景

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

    6.Request底層原理圖

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。