天天看點

Java中getAttribute getParameter 差別

        網上說的不少,發現都是同一篇,汗。。。。。

(1)HttpServletRequest類有setAttribute()方法,而沒有setParameter()方法

(2)當兩個Web元件之間為連結關系時,被連結的元件通過getParameter()方法來獲得請求參數,

(3)當兩個Web元件之間為轉發關系時,轉發目标元件通過getAttribute()方法來和轉發源元件共享request範圍内的資料。 在一本書上看到若是正常則response.getRequestDispatcher(index.jsp).forward(req,resp),否則的話是include(req,resp)(檢視API得知RequestDispatcher隻有那倆方法)。

        getAttribute是取得jsp中 用setAttribute設定的attribute ;parameter得到的是string,attribute得到的是object ;request.getParameter()方法傳遞的資料,會從Web用戶端傳到Web伺服器端,代表Http請求資料; request.setAttribute()和getAttribute()方法傳遞的資料隻會存在于Web容器内部,在具有轉發(很重要的哦)關系的Web元件之間 共享,即request.getAttribute()方法傳回request範圍記憶體在的對象,而request.getParameter()方法是 擷取Http送出過來的資料,最後一條理論化些就是 getParameter用于用戶端重定向,即點選了連結或送出按扭時傳值用,即用于在用表單(post)或url重定(get)向傳值時接收資料用, getAttribute:用于伺服器端重定向時,即在sevlet中使用了forward函數,或struts中使用了mapping.findForward。getAttribute隻能收到程式用setAttribute傳過來的值。 getAttribute()是擷取SESSION的值; 另外,可以用setAttribute,getAttribute發送接收對象.而getParameter顯然隻能傳字元串。 setAttribute 是應用伺服器把這個對象放在該頁面所對應的一塊記憶體中去,當你的頁面伺服器重定向到另一個頁面時,應用伺服器會把這塊記憶體拷貝另一個頁面所對應的記憶體中。 這樣getAttribute就能取得你所設下的值,當然這種方法可以傳對象。session也一樣,隻是對象在記憶體中的生命周期不一樣而已。

        getParameter()得到的值如果下次不送出或儲存起來的話,下次重定向後就沒啦? 

        getAttribute()所要得到的屬性值因為存在session中,是以重定向後仍可以取出?

        getAttribute()在request和session中都有,隻是作用域不同,在取之前肯定是要在某個地方存一下,這種東東可以存取對象 

        這個問題主要是request和session的差别,request範圍較小一些,隻是一個請求,簡單說就是你在頁面上的一個操作, request.getParameter()就是從上一個頁面中的url、form中擷取參數(js擷取複選框document.ElementById()),但如果一個request涉及多個類,後面還要取參數,可以用request.setAttribute()和request.getAttribute(),但是當結果輸出之後,request就結束了。而session可以跨越很多頁面,可以了解是用戶端同一個IE視窗發出的多個請求。這之間都可以傳遞參數,比如很多網站的使用者登入都用到了。