首先request對象代表客戶端的一次請求,可以用它來存儲客戶端請求的一些參數。
getParameter()方法
該方法是用於客戶端通過get或者post傳遞過來的參數,它的返回值類型永遠是是字符串類型
注意,這里強調的是客戶端請求時,是客戶端發送給服務器的參數,這個賦值動作是有客戶端完成的。
例如:
這里的請求參數有action和aaa兩個
post方式:
<form action="http://localhost:8080/servlet-jsp/request/001" method="post">
用戶名:<input name="userName" type="text">
密碼:<input name="password" type="text">
<input type="submit" value="提交">
</form>
這里的請求參數有userName和password
getAttribute()方法
該方法用於獲取request對象中的attribute值,這個值是之前在服務器端才放入到request對象里的,即通過setAttribute(key ,value)放入request
注意:這里強調的是attribute中的值是在服務器端賦予的,而非客戶端送過來的。
其實getParameter()和getAttribute()最簡單的兩點區別就是
1)賦值方式不一樣,前者是客戶端如瀏覽器端將請求參數值送給服務器端,而后者則是在請求到達服務器端之后,在服務器進行存放進去
2)兩者的返回值類型不一樣,前者永遠返回字符串,后者返回任意對象
問題
既然parameter和attribute都是傳遞參數,為什么不直接使用parameter呢?
原因有2:
1)從上面分析可以找到getParameter獲取的是客戶端發送的參數,而且在服務器端不能通過setParameter(key, value)來添加參數,因為沒有這個函數
所以如果需要在服務器端進行跳轉,並需要想下個頁面發送新的參數時,則沒法實現。但是attribute可以,可以通過setAttribute(),將值放入到request對象,然后在其他頁面使用getAttribute獲取對應的值,這樣就達到一次請求可以在多個頁面共享一些對象信息
2)parameter返回值是字符串,意味着不能傳遞其他的對象,如List,但是attribute則可以存放任意類型的Java對象
后台服務器返回對象到前台可以使用request.setAttribute("Object","object")方法將對象傳送到前台頁面。jsp頁面可以通過el表達式取值。