一、request.getParameter() 和request.getAttribute() 區別
(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()方法。
拿一個例子來說一下吧,假如
j1.jsp裡有
[html] view plain copy的話在j2.jsp中通過request.getParameter("username")方法來獲得請求參數username:
[html] view plain copy
或者j1.jsp中有
在j2.jsp中通過request.getParameter("username")來獲得請求參數username。
但是如果范圍內的數據,也還是說一個例子吧。
有j1.jsp j2.jsp和j3.jsp,
j1.jsp月j3.jsp為鏈接關系,j3.jsp與j2.jsp為轉發關系
從j1.jsp鏈接到j3.jsp時,被鏈接的是j3.jsp可以通過getParameter()方法來獲得請求參數.
j3.jsp希望向j2.jsp傳遞從j1.jsp獲取的用戶名字,如何傳遞這一數據呢?先在j3.jsp中調用如下setAttribute()方法:
j1.jsp
[html] view plain copy
j3.jsp
[html] view plain copy
j2.jsp
[html] view plain copy
二、從更深的層次考慮
request.getParameter()方法傳遞的數據,會從Web客戶端傳到Web服務器端。request.getParameter()方法返回String類型的數據。
request.setAttribute()和getAttribute()方法傳遞的數據只會存在於Web容器內部,在具有轉發關系的Web組件之間共享。這兩個方法能夠設置Object類型的共享數據。
getParameter得到的都是String類型的。或者是http://a.jspid=123中的123,或者是某個表單提交過去的數據。
getAttribute則可以是對象。
getParameter()是獲取POST/GET傳遞的參數值;
getAttribute()是獲取對象容器中的數據值;
getParameter:用於客戶端重定向時,即點擊了鏈接或提交按扭時傳值用,即用於在用表單或url重定向傳值時接收數據用。
getAttribute:用於服務器端重定向時,即在sevlet中使用了forward函數,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute傳過來的值。
setAttribute是應用服務器把這個對象放在該頁面所對應的一塊內存中去,當你的頁面服務器重定向到另一個頁面時,應用服務器會把這塊內存拷貝另
一個頁面所對應的內存中。這樣getAttribute就能取得你所設下的值,當然這種方法可以傳對象。session也一樣,只是對象在內存中的生命周
期不一樣而已。
getParameter只是應用服務器在分析你送上來的request頁面的文本時,取得你設在表單或url重定向時的值。
另外,JavaScript與JSP中不能相互傳值,因為JavaScript運行在客戶端,而JSP運行在服務器端,若想使他們之間可以相互傳遞參數,可以在JSP中設置一個hidden控件,用它的value結合上面的用法來傳遞所需要的參數。