request物件主要方法筆記(一)

2021-08-08 01:39:08 字數 2763 閱讀 2059

1.

getparameter(string name):獲得客戶端傳送給

伺服器端

的有name指定的引數值

2.setattribute(string name,object):設定名字為name的request 的引數值 

3.response.sendredirect()與request.getrequestdispatcher().forward(request,response)這兩個物件都可以使頁面跳轉,但是二者是有很大的區別的,分條來說,有以下幾點:

①response.sendredirect(url)-----重定向到指定url 

request.getrequestdispatcher(url).forward(request,response) -----請求**到指定url

②response.sendredirect(url)-----是客戶端跳轉

request.getrequestdispatcher(url).forward(request,response) -----是伺服器端跳轉

③response.sendredirect(url)跳轉到指定的url位址後,上個頁面(跳轉之前的原來頁面)中的請求全部結束,原request物件將會消亡,資料將會消失。緊接著,當前新頁面會新建request物件,即產生新的request物件。

【詳細過程:redirect 會首先發乙個response給瀏覽器,然後瀏覽器收到這個response後再發乙個requeset給伺服器,伺服器接收後發新的response給瀏覽器。這時頁面從瀏覽器獲取來的是乙個新的request。這時,在原來跳轉之前的頁面用request.setattribute存的東西都沒了,如果在當前的新頁面中用request.getattribute取,得到的將會是null。】

request.getrequestdispatcher(url).forward(request,response)是採用請求**方式,在跳轉頁面的時候是帶著原來頁面的request和response跳轉的,request物件始終存在,不會重新建立。

【詳細過程:forward 發生在伺服器內部, 是在瀏覽器完全不知情的情況下發給了瀏覽器另外乙個頁面的response. 這時頁面收到的request不是從瀏覽器直接發來的,可能是在轉頁時己經用request.setattribute在request裡放了資料,在轉到的頁面就可以直接用request.getattribute獲得資料了。】

④使用response.sendredirect()位址列中的**將改變

使用request.getrequestdispatcher().forward(request,response)位址列中的**保持不變。

4.request.getparameter() 和request.getattribute() 區別

getparameter

是用來接受用post個get方法傳遞過來的引數的.

getattribute 

必須先setattribute.

(1)request.getparameter()

取得是通過容器的實現來取得通過類似post,get等方式傳入的資料,request.setattribute()和getattribute()只是在web容器內部流轉,僅僅是請求處理階段。

(2)request.getparameter() 

方法傳遞的資料,會從web客戶端傳到web伺服器端,代表http請求資料。request.getparameter()方法返回string型別的資料。

request.setattribute()

和 getattribute()

方法傳遞的資料只會存在於web容器內部

還有一點就是,httpservletrequest 類有 setattribute() 方法,而沒有setparameter() 方法。

拿乙個例子來說一下吧,假如兩個web頁面間為鏈結關係時,就是說要從1.jsp鏈結到2.jsp時,被鏈結的是2.jsp可以通過getparameter()方法來獲得請求引數.

假如1.jsp裡有

html**  

的話在2.jsp中通過request.getparameter("username")方法來獲得請求引數username:

html**  

< % string username=request.getparameter("username"); %>  

但是如果兩個web間為**關係時,**目的web可以用getattribute()方法來和**源web共享request範圍內的資料,也還是說乙個例子吧。

有1.jsp和2.jsp

1.jsp希望向2.jsp傳遞當前的使用者名字,如何傳遞這一資料呢?先在1.jsp中呼叫如下setattribute()方法:

html**  

<%  

string username=request.getparameter("username");  

request.setattribute("username",username);  

%>  

在2.jsp中通過getattribute()方法獲得使用者名字:

html**  

<% string username=(string)request.getattribute("username"); %>  

request.getparameter()就是從上乙個頁面中的url、form中獲取引數,但如果乙個request涉及多個類,後面還要取引數, 可以用request.setattribute()和request.getattribute(),但是當結果輸出之後,request就結束了。

Request物件的主要方法

setattribute string name,object 設定名字為name的request的引數值 getattribute string name 返回由name指定的屬性值 getattributenames 返回request物件所有屬性的名字集合,結果是乙個列舉的例項 getcook...

Request物件的主要方法

setattribute string name,object 設定名字為 name 的request 的引數值 getattribute string name 返回由 name 指定的屬性值 getattributenames 返回request 物件所有屬性的名字集合,結果是乙個列舉的例項 g...

Request物件的主要方法

setattribute string name,object 設定名字為name的request的引數值 getattribute string name 返回由name指定的屬性值 getattributenames 返回request物件所有屬性的名字集合,結果是乙個列舉的例項 getcook...