一、httpservletrequest介紹
httpservletrequest物件代表客戶端的請求,當客戶端通過http協議訪問伺服器時,http請求頭中的所有資訊都封裝在這個物件中,通過這個物件提供的方法,可以獲得客戶端請求的所有資訊。
二、request常用方法
2.1、獲得客戶機資訊
getrequesturl方法返回客戶端發出請求時的完整url。
getrequesturi方法返回請求行中的資源名部分。
getquerystring 方法返回請求行中的引數部分。
getpathinfo方法返回請求url中的額外路徑資訊。額外路徑資訊是請求url中的位於servlet的路徑之後和查詢引數之前的內容,它以「/」開頭。
getremoteaddr方法返回發出請求的客戶機的ip位址。
getremotehost方法返回發出請求的客戶機的完整主機名。
getremoteport方法返回客戶機所使用的網路埠號。
getlocaladdr方法返回web伺服器的ip位址。
getlocalname方法返回web伺服器的主機名。
2.2、獲得客戶機請求頭
getheader(string name)方法:string
getheaders(string name)方法:enumeration
getheadernames()方法
2.3、獲得客戶機請求引數(客戶端提交的資料)
getparameter(string)方法(常用)
getparametervalues(string name)方法(常用)
getparameternames()方法(不常用)
getparametermap()方法(編寫框架時常用)
3.6、提交中文資料亂碼問題總結
1、如果提交方式為post,想不亂碼,只需要在伺服器端設定request物件的編碼即可,客戶端以哪種編碼提交的,伺服器端的request物件就以對應的編碼接收,比如客戶端是以utf-8編碼提交的,那麼伺服器端request物件就以utf-8編碼接收(request.setcharacterencoding(「utf-8」))
2、如果提交方式為get,設定request物件的編碼是無效的,request物件還是以預設的iso8859-1編碼接收資料,因此要想不亂碼,只能在接收到資料後再手工轉換,步驟如下:
1).獲取獲取客戶端提交上來的資料,得到的是亂碼字串,data=」???è?????」
string data = request.getparameter(「paramname」);
2).查詢iso8859-1碼表,得到客戶機提交的原始資料的位元組陣列
byte source = data.getbytes(「iso8859-1」);
3).通過位元組陣列以指定的編碼構建字串,解決亂碼
data = new string(source, 「utf-8」);
通過位元組陣列以指定的編碼構建字串,這裡指定的編碼是根據客戶端那邊提交資料時使用的字元編碼來定的,如果是gb2312,那麼就設定成data = new string(source, 「gb2312」),如果是utf-8,那麼就設定成data = new string(source, 「utf-8」)
四、request物件實現請求**
4.1、請求**的基本概念
請求**:指乙個web資源收到客戶端請求後,通知伺服器去呼叫另外乙個web資源進行處理。
請求**的應用場景:mvc設計模式
在servlet中實現請求**的兩種方式:
1、通過servletcontext的getrequestdispatcher(string path)方法,該方法返回乙個requestdispatcher物件,呼叫這個物件的forward方法可以實現請求**。
例如:將請求**的test.jsp頁面
1 requestdispatcher reqdispatcher =this.getservletcontext().getrequestdispatcher(「/test.jsp」);
2 reqdispatcher.forward(request, response);
2、通過request物件提供的getrequestdispatche(string path)方法,該方法返回乙個requestdispatcher物件,呼叫這個物件的forward方法可以實現請求**。
例如:將請求**的test.jsp頁面
1 request.getrequestdispatcher(「/test.jsp」).forward(request, response);
request物件同時也是乙個域物件(map容器),開發人員通過request物件在實現**時,把資料通過request物件帶給其它web資源處理。
request物件作為乙個域物件(map容器)使用時,主要是通過以下的四個方法來操作
setattribute(string name,object o)方法,將資料作為request物件的乙個屬性存放到request物件中,例如:request.setattribute(「data」, data);
getattribute(string name)方法,獲取request物件的name屬性的屬性值,例如:request.getattribute(「data」)
removeattribute(string name)方法,移除request物件的name屬性,例如:request.removeattribute(「data」)
getattributenames方法,獲取request物件的所有屬性名,返回的是乙個,例如:enumeration attrnames = request.getattributenames();
4.2、請求重定向和請求**的區別
乙個web資源收到客戶端請求後,通知伺服器去呼叫另外乙個web資源進行處理,稱之為請求**/307。
乙個web資源收到客戶端請求後,通知瀏覽器去訪問另外乙個web資源進行處理,稱之為請求重定向/302。
Request常用方法
getrequesturl方法返回客戶端發出請求時的完整url。getrequesturi方法返回請求行中的資源名部分。getquerystring 方法返回請求行中的引數部分。getpathinfo方法返回請求url中的額外路徑資訊。額外路徑資訊是請求url中的位於servlet的路徑之後和查詢引...
request常用方法
request.getschema 可以返回當前頁面使用的協議,http 或是 https request.getservername 可以返回當前頁面所在的伺服器的名字 request.getserverport 可以返回當前頁面所在的伺服器使用的埠,就是80 request.getcontext...
request常用方法
request.getservletpath 獲取與 中匹配的路徑,也是在平時經常用到的。request.getcontextpath 獲取專案的根路徑。request.getrequesturl 獲取請求的位址鏈結 瀏覽器中輸入的位址 request.getscheme 獲取的是使用的協議 htt...