- 從零開始學Java Web開發
- 孫更新等編著
- 813字
- 2018-12-27 13:06:08
5.6 application內置對象
JSP中的application內置對象主要是用來保存整個網站的共享信息。當服務器啟動后就將產生application對象,所有訪問該站點的客戶端對應的application對象都是同一個,即所有客戶端共享這個內置的application對象,該對象將隨著服務器的運行一直存在下去,直到服務器關閉,application對象才被銷毀。
application對象的主要方法如表5.6所示。
表5.6 application對象中常用方法

通過表5.6可以看到,application內置對象最常用的方法還是getAttribute()和setAttribute()方法,下面實例5-12就詳細介紹了如何使用application對象的這兩個方法來實現網站計數器的功能。
【實例5-12】網站計數器。
01 <%@ page contentType="text/html; charset=GB2312" %> 02 <HTML> 03 <HEAD> 04 <TITLE>application計數器</TITLE> 05 </HEAD> 06 <BODY> 07 <BR> 08 <% 09 Integer number=(Integer)application.getAttribute("Count");//獲取application 中的Count對象 10 if(number==null) //檢查Count屬性是否可取得 11 { number=new Integer(1); //設置初始值 12 application.setAttribute("Count",number); //將計數值存儲到application中 13 } 14 else 15 { 16 number=new Integer(number.intValue()+1); //將取得的值增加1 17 application.setAttribute("Count",number); //將計數值存儲到application中 18 } 19 %> 20 <P><P>您是第 21 <%int a=((Integer)application.getAttribute("Count")).intValue(); //顯示用戶是 第幾個訪問者 22 %> 23 <%=a%> 24 個訪問本站的客戶。 25 </BODY> 26 </HTML>
【代碼說明】在該頁面的第9行中調用application對象的getAttribute()方法讀取application中存儲的計數器的值,如果讀取的值為null,則在第12行調用application對象的setAttribute()方法將計數器的初始值存儲到application中,如果讀取的值不為null,則在第16行將取得的值增加1后,將新的值存儲到application中,最后在第21行調用application對象的getAttribute()方法讀取application中存儲的計數器的值并顯示在頁面上。
【運行結果】該頁面第一次被請求的執行結果如圖5.25所示。
第一次執行結果是正確的,但是當再次刷新頁面時,將會看到網站的計數器的數值不斷地增加,這與實際情況應該是相悖的,因為是同一個用戶在刷新,網站的計數器的數值應該不發生變化。因為,單純使用application對象實現的計數器并不能完全符合實際的要求。這就需要使用session對象結合application對象共同來實現。
將實例5-12的代碼修改如下:

圖5.25 第一次訪問頁面顯示的內容
01 <%@ page contentType="text/html;charset=GB2312" %> 02 <HTML> 03 <BODY> 04 <% 05 if(session.isNew()) //判斷用戶是否執行刷新操作 06 { 07 Integer number=(Integer)application.getAttribute("Count"); //讀取application對象中的值 08 if(number==null) //檢查Count屬性是否可取得 09 { number=new Integer(1); //設置初始值 10 application.setAttribute("Count",number); //將計數值存儲到application中 11 } 12 else 13 { number=new Integer(number.intValue()+1); //將取得的值增加1 14 application.setAttribute("Count",number); //將計數值存儲到application中 15 } 16 Integer myNumber=(Integer)application.getAttribute("Count"); //再次讀取application對象中的值 17 session.setAttribute("MyCount",myNumber); //將獲取的值存儲到session對象中 18 } 19 %> 20 <P><P>您是第 21 <%int a=((Integer)session.getAttribute("MyCount")).intValue(); 22 %> 23 <%=a%> 24 個訪問本站的客戶。 25 </BODY> 26 </HTML>
【代碼說明】修改后的代碼與之前最大的不同就是引入了session對象,首先,在第5行使用session的isNew()方法來判斷該頁面是第一次被請求還是被刷新,如果第一次被請求,則在第13行執行計數器數值修改,如果是被刷新則直接顯示計數器的值。其次,在頁面中顯示當前計數器值之前,在第16~17行將存儲在application對象中的計數器值讀取出來存放到session對象中,然后在第21行中再從session對象中讀取并顯示在頁面上,這是為了防止多個用戶之間相互干擾。這樣刷新頁面計數器的值就不會發生變化了。
- AWS:Security Best Practices on AWS
- 快學Flash動畫百例
- 電腦上網直通車
- 機器自動化控制器原理與應用
- Mastering Elastic Stack
- STM32嵌入式微控制器快速上手
- WordPress Theme Development Beginner's Guide(Third Edition)
- Nginx高性能Web服務器詳解
- Unity Multiplayer Games
- MATLAB-Simulink系統仿真超級學習手冊
- 工業機器人力覺視覺控制高級應用
- PowerPoint 2010幻燈片制作高手速成
- SQL Server 2019 Administrator's Guide
- 超好玩的Python少兒編程
- Containerization with Ansible 2