Web開發的request與response類的詳細講解

​1.Request和Response概述

我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個爲代表請求的request和代表響應的response。

service方法中的request的類型是ServletRequest,而doGet/doPost方法的request的類型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大。

service方法中的response的類型是ServletResponse,而doGet/doPost方法的response的類型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加強大。

2.運行流程

在這裏插入圖片描述

3.通過抓包工具抓取Http請求和響應

在這裏插入圖片描述

因爲request代表請求,所以我們可以通過該對象分別獲得Http請求的請求行,請求頭和請求體

在這裏插入圖片描述
因爲response代表響應,所以我們可以通過該對象分別獲取Http響應的響應行,響應頭和響應體

4.通過request獲得請求行

獲得客戶端的請求方式:String getMethod()

獲得請求的資源:

    request.getRequestURI() 
    request.getRequestURL() 
    request.getContextPath() ---web應用的名稱
    request.getQueryString()---獲取get提交url地址後邊跟着的參數字符串                    
    username=xxx&password=123456
    request.getRemoteAddr() --- 獲得訪問的客戶端IP地址

5.通過request獲得請求頭

 request.getHeader(String name)

請求頭中Referer字段的作用:獲取到訪問地址,從而進行判斷,可做爲防盜鏈。

6.通過request獲得請求體

請求體中的內容是通過post提交的請求參數,格式是:

username=xxx&password=123456&hobby=ball

以上面參數爲例,通過以下方法獲得請求參數:

String getParameter(String name) 
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()

解決post提交方式的亂碼:

request.setCharacterEncoding("UTF-8");

解決get提交的方式的亂碼:

parameter = new String(username.getbytes("iso8859-1"),"utf-8");

7.request的其他功能

(1)request是一個域對象

request對象也是一個存儲數據的區域對象,所以也具有如下方法:

setAttribute(String name, Object o)getAttribute(String name)removeAttribute(String name)

注意:request域的作用範圍:一次請求中

(2)request完成請求轉發

path是轉發的地址

request.getRequestDispatcher(path).forward(request,response)

注意:ServletContext域與Request域的生命週期比較?

ServletContext:
		創建:服務器啓動
		銷燬:服務器關閉
		域的作用範圍:整個web應用
	request:
		創建:訪問時創建request
		銷燬:響應結束request銷燬
域的作用範圍:一次請求中

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章