以前很不明白Bean的scope屬性的含義,今天做了一個(gè)實(shí)驗(yàn),終于差不多搞明白了。貼出來與大家共享。 例子很簡單,Bean的功能為取當(dāng)前時(shí)間,其代碼為: Common.java: -------------------- package XX;
import java.util.Date; import java.text.*;
public class Common { Date d=new Date(); public String now(String s) { SimpleDateFormat formatter = new SimpleDateFormat(s); return formatter.format(d); } }
測試頁面的代碼為: date.jsp ----------------------------------------------------------- <jsp:useBean id="cm" scope="XX" class="XX.Common"/> <%=cm.now("yyyy-MM-dd HH:mm:ss")%>
測試結(jié)果:
1、當(dāng)scope=application時(shí),我們?yōu)g覽date.jsp,這時(shí)顯示出了系統(tǒng)時(shí)間。可是不管我們怎么刷新,重新打開一次瀏覽器,甚至換臺(tái)機(jī)器,它顯示的時(shí)間始終不變,都是當(dāng)初的時(shí)間(即bean剛創(chuàng)建時(shí)得到的系統(tǒng)時(shí)間),因?yàn)閟cope=application,所以Bean的實(shí)例在內(nèi)存中只有一份,此時(shí)只要不重新啟動(dòng)WEB服務(wù),輸出不會(huì)變化。
2、當(dāng)scope=session時(shí),瀏覽date.jsp,刷新時(shí)顯示也不會(huì)變化。可是當(dāng)我們重新打開一瀏覽器,即一個(gè)新的session,系統(tǒng)便再次創(chuàng)建Bean的實(shí)例,取得當(dāng)前系統(tǒng)時(shí)間,這時(shí)將得到正確的時(shí)間。同樣,再次刷新新打開的頁面(新的session),顯示也不會(huì)變化。
3、當(dāng)scope=page/request(它們的區(qū)別只在于包含靜態(tài)文件時(shí),此處無區(qū)別)時(shí),不斷刷新頁面將不斷得到當(dāng)前系統(tǒng)時(shí)間。
以上可以看出不同的scope,Bean有不同的作用域。使用時(shí)一定注意,不要將得到經(jīng)常變動(dòng)的Bean的scope設(shè)為application或session,那將得到不正確的結(jié)果.
|