一、httpservletrequest概述
我們在建立servlet時會覆蓋service()方法,或doget()/dopost(),這些方法都有兩個引數,乙個為代表請求的request和代表響應response。
service方法中的request的型別是servletrequest,而doget/dopost方法的request的型別是httpservletrequest,httpservletrequest是servletrequest的子介面,功能和方法更加強大,今天我們學習httpservletrequest。
二、request的執行流程
三、通過抓包工具抓取http請求
因為request代表請求,所以我們可以通過該物件分別獲得http請求的請求行,請 求頭和請求體
四、通過request獲得請求行
獲得客戶端的請求方式:string
getmethod
()獲得請求的資源:
string
getrequesturi
() stringbuffer
getrequesturl
() string
getcontextpath
() ---web應用的名稱
string
getquerystring
() ---- get提交url位址後的引數字串
username=zhangsan&password=123
注意:request獲得客戶機(客戶端)的一些資訊
request.getremoteaddr() --- 獲得訪問的客戶端ip位址
五、通過request獲得請求頭
longgetdateheader
(string
name)
string
getheader
(string
name)
enumeration
getheadernames
()enumeration
getheaders
(string
name)
intgetintheader
(string
name)
referer
做防盜煉
六、通過request獲得請求體
請求體中的內容是通過post提交的請求引數,格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username [zhangsan]
password [123]
hobby [football,basketball]
以上面引數為例,通過一下方法獲得請求引數:
string
getparameter
(string
name)
string
getparametervalues
(string
name)
enumeration
getparameternames
()map
getparametermap
()注意:get請求方式的請求引數 上述的方法一樣可以獲得
解決post提交方式的亂碼:request.setcharacterencoding("utf-8");
解決get提交的方式的亂碼:
parameter = new string(parameter.getbytes("iso8859-1"),"utf-8");
七、request的其他功能
request是乙個域物件
request物件也是乙個儲存資料的區域物件,所以也具有如下方法:
setattribute
(string
name, object
o)getattribute
(string
name)
removeattribute
(string
name)
注意:request域的作用範圍:一次請求中
2.request完成請求**
獲得請求**器----path是**的位址
requestdispatcher
getrequestdispatcher
(string
path)
通過**器物件**
requestdispathcer.forward
(servletrequest
request, servletresponse
response)
注意:servletcontext域與request域的生命週期比較?
servletcontext:
建立:伺服器啟動
銷毀:伺服器關閉
域的作用範圍:整個web應用
request:
建立:訪問時建立request
銷毀:響應結束request銷毀
域的作用範圍:一次請求中
注意:**與重定向的區別?
1)重定向兩次請求,**一次請求
2)重定向位址列的位址變化,**位址不變
3)重新定向可以訪問外部** **只能訪問內部資源
4)**的效能要優於重定向
重定向**
總結:request獲得行的內容
request.getmethod()
request.getrequesturi()
request.getrequesturl()
request.getcontextpath()
request.getremoteaddr()
request獲得頭的內容
request.getheader(name)
request獲得體(請求引數)
string request.getparameter(name)
maprequest.getparametermap();
string request.getparametervalues(name);
注意:客戶端傳送的引數 到伺服器端都是字串
獲得中文亂碼的解決:
post:request.setcharacterencoding(「utf-8」);
get:
parameter = new string(parameter.getbytes(「iso8859-1」),」utf-8」);
request**和域
request.getrequestdispatcher(**的位址).forward(req,resp);
request.setattribute(name,value)
request.getattribute(name)
HttpServletRequest常用的方法
通過request物件得到客戶端url方法如下 list 1 request.getrequesturl color red 客戶請求的url,不包括引數資料。2 request.getrequesturi color red cbice boardaction.do color 將url的網域名稱...
HttpServletRequest常用的方法
1 假設客戶端位址是 通過request物件得到客戶端url方法如下 1 request.getrequesturl 客戶請求的url,不包括引數資料。2 request.getrequesturi cbice boardaction.do 將url的網域名稱和尾隨的引數擷取掉,剩下的那部分就是ur...
HttpServletRequest方法總結
httpservletrequest方法總結 getscheme 方法返回請求的計畫,比如http,https或者ftp.getservername 方法返回被傳送請求的伺服器的主機名 getserverport 方法返回被傳送請求的埠號。getcontextpath 返回請求位址的根目錄,以 開關...