通過getmethod方法獲得的是客戶端訪問該web應用的http請求方式。
代碼和結果如下:
1
2
|
string requestmethod = request.getmethod(); system.out.println(requestmethod); |
想獲取客戶端發來的http請求頭中的內容可以使用如下方法:
getdateheader()
getheader(string)
getheadernames()
getheaders(string)
getintheader(string);
這些方法在各個特定的情況下能有不同的用途,體現出獲取客戶端請求頭方式的多樣性。
如通過getheader(string)可以獲取指定請求頭的數據內容:
1
2
|
string connectionstate = request.getheader( "connection" ); system.out.println(connectionstate); |
而通過getheadernames()可以獲取發送的所有請求頭,例:
1
2
3
4
5
6
|
enumeration e = request.getheadernames(); while (e.hasmoreelements()) { string headername = (string) e.nextelement(); string headervalue = request.getheader(headername); system.out.println(headername+ ":" +headervalue); } |
而通過getheaders(string)方法獲取的是某個同名頭的內容,適用于當某個請求頭有多個內容時使用。
介紹完獲取請求行和請求頭,下面介紹獲取請求數據中內容的方法:
getpatameter(string)
getparameternames()
getparametervalues(string)
getparametermap()
和getinputstream()
使用getpatameter(string)方式可以獲取請求數據中指定的數據值
代碼如下:
1
2
|
string value = request.getparameter( "username" ); system.out.println(value); |
常可以在瀏覽器地址url后直接寫入參數數據來模擬get方式:
最終在控制臺得到:
通過getparameternames()可以獲取多個參數:
1
2
3
4
5
6
|
enumeration e = request.getparameternames(); while (e.hasmoreelements()) { string paramname = (string)e.nextelement(); string paramvalue = request.getparameter(paramname); system.out.println(paramname+ ":" +paramvalue); } |
使用getparametervalues(string)有助于獲取當請求數據參數名有相同時的情況:
比如下面這種情況:
代碼:
1
2
3
4
|
string[] values = request.getparametervalues( "username" ); for ( int i= 0 ;i<values.length;i++) { system.out.println(values[i]); } |
在控制臺觀察:
(注意:像getpatameter(string)、getparametervalues(string)等等這樣的方法,都要小心空指針異常,可能的原因在于并沒有這樣的參數,還有一種就是在url后沒有任何參數傳入,所以要特別注意,應該加入健壯性判斷。這也是編程過程中會碰到傳入參數都應該注意的問題。)
使用getparametermap()可以獲取以請求數據中參數和參數值作為的鍵值對的map集合。這樣我們就能同時獲取鍵值對。假設有如下情況:
代碼為:
1
2
3
4
5
6
7
8
|
map<string,string[]> map = request.getparametermap(); for (map.entry<string, string[]> entry :map.entryset()) { string paramname = entry.getkey(); for ( int i= 0 ;i<entry.getvalue().length;i++){ string paramvalue = entry.getvalue()[i]; system.out.println(paramname+ ":" +paramvalue); } } |
如果請求數據參數為:
那么在控制臺上看到的則是:
以上說明了常用的獲取數據的方式,還有一種屬于request響應對象的getinutstream方法,而這個方法一般只用于大容量的數據獲取,比如文件上傳,將在之后的篇章中介紹。
下面介紹其他常用方法
通過getrequesturi方法和getrequesturl可以獲取http請求服務器資源的uri和url,關于uri和url的區別可以通過獲取后的字符串來查看:
代碼:
1
2
3
4
5
|
string fileuri = request.getrequesturi(); system.out.println( "uri: " +fileuri); stringbuffer fileurl = request.getrequesturl(); system.out.println( "url: " +fileurl.tostring()); |
訪問該servlet,得到:
可以看出uri只包括在服務器中的web應用名和資源對外訪問路徑(虛擬目錄)。
通過getquerystring()方法可以獲取url上由get方式帶來的參數:
若代碼為:
1
|
system.out.println(request.getquerystring()); |
而我在訪問這個servlet的url上添加:“?username=fjdingsd&password=123”:
那么當訪問這個servlet之后,在myeclipse的控制臺將看到:
通過getremoteaddr方法可以獲取訪問該web應用的客戶端ip地址。
代碼:
1
|
system.out.println(request.getremoteaddr()); |
而通過getremotehost方法獲取的是訪問該web應用的客戶端主機名,如果沒有在dns服務器上注冊的則是獲取ip地址。這里說的主機名是指在dns上注冊的,比如www.baidu.com,那么通過該方法如果從該主機上來訪問,則獲取到的是:baidu.com。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。