2011年9月12日 星期一

[J2EE] getParameter and getAttribute

* getParameter()
  • 資料會從 web client 傳到 web server,表示 HTTP 請求數據,get/post 的參數(For HTTP servlets, parameters are contained in the query string or posted form data. )。
  • app server 在分析你送上來的 request 頁面內容時,取得你設在表單或 URL 重定向時的值。
  • 只能接受 String。
  • ex: A.jsp 連到 B.jsp 時,B.jsp 可以透過 getParameter() 獲得請求參數。


* getAttribute()
  • 資料只會存在 web container,在具有轉發關係的 web 組件間共享,用來接受來自 servlet 的變數或 action,主要資料來至於server conainer 的記憶體,透過兩個方式設定:
  • container 自動加上去的一些 自訂request 資訊(javax.servlet.request.X509Certificate 等)。
  • setAttribute是 app server 把 object 放在該頁面所對應的空間,當頁面被 forward 到另一個頁面時, app server 會把這個空間的資訊複製到另一頁面所對應的空間中,所以getAttribute就能取得之前所設下的值。
  • 接受 type 是 Object。
  • 屬於 class HttpServletRequest。
  • ex: A.jsp forwaed到 B.jsp 時,可在 A.jsp 中先 setAttribute(),在 B.jsp 便可由 getAttribute 取得。


* Overview
  • 所以當使用get/post資料時,應該是用getParameter 而非 getAttribute ,若要在request (像是session)分享資訊(含Object),可以用getAttribute ,若要在兩個page 之間,理當要forward 才可以用getAttribute 共享,不然scope已經超過了..
  • ActionForm若僅只是要給forward使用的變數 , 可以用set/get Attribute 而少用session(效能)



* Reference
- request.getAttribute()和request.getParameter()的区别 - Java / Java EE
- JWorld@TW Java論壇 - Re:request的getParameter和getAttribute
- request.getAttribute()与request.getParameter() 方法区别_Struts_Java中文网
- request.getParameter和request.getAttribute之间的区别 - LL_java - 博客园

沒有留言:

張貼留言