request瀏覽器
(1)request的setAttribute()與getAttribute()方法通常都是成對出現,首先經過setAttribute()方法設置屬性與屬性值,而後經過getAttribute()方法根據屬性獲取到與該屬性對應的對象值。setAttribute()與getAttribute()方法都是在服務器端內部執行,客戶端並不清楚。(注意:getAttribute()以後須要進行向下類型轉換,將屬性值轉換爲真正的對象)服務器
(2)request的getParameter()方法是獲取到客戶端經過表單或url請求參數所發送過來的參數值,是客戶端與服務器之間的交互,服務器要想獲取到客戶端發送過來的數據,就須要使用getParameter()方法來獲取。沒有與之對應的setParameter()方法。session
Sessionapp
(1)session也存在setAttribute()和與之對應的getAttribute()方法。但與request不一樣的是,session對象內數據的存活範圍也就是session對象的存活範圍(只要瀏覽器不關閉,session對象就會一直存在),所以,在同一個瀏覽器窗口中,不管向服務器端發送多少個請求,session對象只有一個。jsp
(2)Request對象內數據的存活範圍就是在request對象的存活範圍內,當客戶端向服務器端發送一個請求,服務器向客戶端返回一個響應後,該請求對象就被銷燬了;以後再向服務器發送新的請求時,服務器會建立新的request對象,該request對象與以前的request對象鎖存放的對象無任何關係,所以也沒法得到在它以前的request對象所存放的數據。網站
Applicationurl
(1)存活範圍最大的對象,只要服務器沒有關閉,application對象中的數據就會一直存在。在整個服務器運行過程當中application只有一個。spa
聯繫與區別:request,session以及application3個對象的範圍是逐個增長的;request只在一個請求範圍內;session是在瀏覽器串口的範圍內;application則是在整個服務器的運行過程當中。3d
示例:實現一個網頁計數器來模擬三種對象做用範圍。code
request.jsp
<% if (request.getAttribute("counter") == null) { request.setAttribute("counter", "1"); } else { System.out.println("else"); String strnum = null; strnum = (String)request.getAttribute("counter"); int icount = 0; icount = Integer.valueOf(strnum).intValue(); icount++; request.setAttribute("counter", Integer.toString(icount)); } %> 您是第<%= request.getAttribute("counter") %> 位訪問者!
request對象下,刷新網站,計數器保持不變。(每刷新一次request對象即請求一次,服務器返回一個響應後即銷燬。)
將代碼中的request對象通通改成session對象。再次運行。
關閉瀏覽器以前:
更換瀏覽器再此運行,session對象的存活範圍在關閉瀏覽器或更換瀏覽器後便失效。
最後更改代碼中session對象爲application對象。運行。此時服務器並無關閉,啓用兩款瀏覽器,發現依然有效。