request對象和request對象的原理 1.request和response對象request對象和request對象的原理時由伺服器創建的,我們來使用它們 2.request對象是來獲取請求消息,response對象是來設置響應消息 requset對象繼承體繫結構: ServletReque ...
request對象和request對象的原理
1.request和response對象request對象和request對象的原理時由伺服器創建的,我們來使用它們
2.request對象是來獲取請求消息,response對象是來設置響應消息
requset對象繼承體繫結構:
ServletRequest -- 介面
| 繼承
HttpServletRequest -- 介面
request功能:
1.獲取請求行數據
*GET /day14/demo1?name=zhangsan HTTP/1.1
*方法
1. 獲取請求方式:GET
*String getMethod()
**2.獲取虛擬目錄:/day14
*String getContextPath()
3.獲取Servlet資源路徑:/demo1
*String getServletPath()
4.獲取get方式的請求參數:name=zhangsan
*String getQueryString()
**5.獲取請求URI:/day14/demo1
*String getRequestURI(); /day14/demo1
*StringBuffer getRequestURL(): http://localhost/day14/demo1
例子:
URI:統一資源標識符 共和國
URL:統一資源定位符 中華人民共和國
6.獲取協議及版本:HTTP/1.1
*String getProtocol()
7.獲取客戶機的IP地址:
*String getRemoteAddr()
2.獲取請求頭數據
*方法:
***String getHeader(String name);通過請求頭的名稱獲取請求頭的值
*Enumeration<String> getHeaderNames();獲取所有的請求頭名稱
//Enumeration 枚舉的一種,想象成迭代器,可以遍歷出數據
3.獲取請求體數據
*請求體:只有post請求方式,才有請求體,在請求體中封裝了post請求的請求參數
*步驟:
1.獲取流對象
* BufferedReader getReader();獲取字元輸入流,只能操作字元數據
* ServletInputStream getInputStream();獲取位元組輸入流,可以操作所有類型數據
2.再從流對象中拿數據
2:主要功能
1.獲取請求參數通用方式(無論get或post請求方式都可以使用下列方法獲取請求參數)
1.String getParameter(String name):根據參數名稱獲取參數值
username=zhangsan&pswd=123
2.String[] getParametervalues(String name):根據參數名稱獲取參數值的數組
hobby=study&hobby=game
3.Enumeration<String> getParameterNames():獲取所有請求的參數名稱
4.Map<String,String[]>getParameterMap();獲取所有參數的map集合
**中文亂碼問題 *
get方式:tomcat8 已結將get方式亂碼問題解決了
*post方式:會亂碼 request.setCharacterEncoding("utf-8");
2.請求轉發(包含):一種在伺服器內部的資源跳轉方式(例如 servletA 需要用 servletB的資源)
作用:
1.當一個請求需要由多個servlet協作完成時,這時可以使用請求轉發(包含)
2.請求轉發:由後一個servlet響應數據(體),前一個servlet可以設置響應頭(留頭不留體)
3.請求包含:有兩個servlet共同完成響應體,由前一個servlet設置響應頭(留體不留頭)
4.無論請求轉發或包含,都是使用同一個request和response
1.步驟:
1.通過request對象獲取請求轉發器對象:RequestDisspatcher getRequestDisspatcher(String path)
2.使用RequestDisspatcher對象來進行轉發:forward(ServletRequest request, ServletResponse response)
(RequestDisspatcher對象來進行轉發:include 包含的方法)
2.特點:
1.瀏覽器地址欄路徑沒有發生變化
2.只能轉發到當前伺服器內部資源中
3.轉發是同一次請求
請求轉發:留頭不留體
請求包含:留體不留頭
請求轉發和重定向的區別:
1.請求轉發是一個請求一個響應,重定向是兩次請求兩次響應
2.請求轉發地址欄內容不變,重定向顯示最後一個請求的地址
3.請求轉發只能轉發到本項目中的其他servlet,重定向還可以重定向到其他項目的servlet
4.請求轉發是伺服器內轉發,只需寫出要轉發的servlet路徑,重定向要寫出項目名
重定向 response:請求給servlet1 servlet1做不了回應給客戶端,再請求servlet2,servlet2回應
response.sendRedirect("/webrequest/redirect2"); 重定向要加上項目名
request作為域時的主要功能:
共用數據:
*域對象:一個有作用範圍的對象,可以在範圍內共用數據
*request域:代表一次請求的範圍,一般用於請求轉發的多個資源中共用數據
*方法:
1.void setAttribute(String name, Object obj);存儲數據
2.Object getAttribute(String name);通過鍵獲取值
3.void removeAttribute(String name);通過鍵移除鍵值對
瞭解了request和response的基本用法,並且掌握了請求轉發包含與重定向的知識後,就可以明白當請求到來時,servlet是如何處理的。下文將介紹數據轉發到頁面,呈現給用戶是用怎樣的方式,jsp與el表達式