Request和response對象原理:
1.Tomcat創建Servlet對象,調用init方法
2.Tomcat創建request,和response對象並且傳遞給service方法,作為參數 ,然後執行service方法
3. 使用request對象獲取請求數據,然後我們將響應內容數據設置在response對象中 Tomcat從response對象中獲取數據,處理完,響應給瀏覽器
request對象和response對象的作用
request是用來獲取請求消息的,response對象是用來設置響應消息的
2. request對象的繼承體系
ServletRequest—接口
HttpServletRequest—接口
org.apache.catalina.connector.RequestFacade 類(tomcat)實現類
3. request的功能
- 獲取請求行數據
a.獲取請求方式
String getMethod()
b.獲取虛擬目錄
String getContextPath()
c.獲取Servlet的路徑
String getServlet Path()
d.獲取get方式的請求參數
String getQueryString()
e.獲取URI
String getRequestURI()虛擬目錄加servlet的資源路徑
f.獲取URL
String getRequestURL() 整個的請求地址
g.獲取協議版本
String getProtocol()
h.獲取客户機的IP地址
String getRemoteAddr()
- 獲取請求頭數據
a.
String getHeader(String name)通過請求頭的名稱來獲取請求頭的值
b.
Enumeration<String> getHeaderNames():自動獲取所有請求頭的名稱
- 獲取請求體數據
只有POST方式才有請求體,在請求體中封裝了post請求體的參數
a. 獲取流對象
BufferedReader getReader():獲取字符輸入流,只能操作字符數據
ServletInputStream getInputSteam:獲取字節輸入流對象,可以操作所有的數據類型
b. 再從流對象中拿數據
- 中文亂碼問題
Get方式:tomcat8已經將get方式亂碼問題解決了
Post方式會亂碼:
在獲取參數之前,設置request的編碼格式為request.setCharacterEncoding(“utf-8”)
- 請求轉發:
一種在服務器內部的資源跳轉方式
a.
通過request對象獲取請求轉發器對象
Request.RequestDispatcher(String path)
b.
使用轉發器對象調用轉發
轉發器對象.forward(ServletReaquest request,ServletResponse response)
c. 請求轉發的特點
瀏覽器地址欄路徑不發生變化
只能轉發到當前服務器內部資源中
轉發是一次請求
- 共享數據
域對象:
一個有作用範圍的對象,可以在範圍內共享數據
Request域對象:
代表一次請求的範圍,一般用於請求轉發的多個資源中共享數據
方法:
1. void setAttribute(String name,Object obj)存儲數據
2. Object getAttribute(String name)通過鍵來獲取
3. Void removeAttribute(String name)通過鍵來移除鍵值對