Request(HTTP请求对象)的笔记和底层原理
Request筆記以及底層原理
- 1.HTTP協議
- 2.學會識別請求
- 3.Request請求對象
- 4.Request是域對象
- 5.使用域對象進行數據傳遞(請求轉發)
- 6.Request底層原理圖
1.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请求对象)的笔记和底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于javaweb的美发店理发店会员管理
- 下一篇: 运行资源优化配置