Test.javapackage test; import java.util.Date;import java.text.SimpleDateFormat;public class Test { Date d=new Date(); public Test() { //super(); System.out.println("在構造方法中"); // TODO Auto-generated constructor stub } public String getDateTime(){ System.out.println("在執行個體方法中"); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); String now=format.format(d); return now; }}
index.jsp<%@page language="java" contentType="text/html;charset=gb2312"%><jsp:useBean id="tobby" class="test.Test" scope="page"/><%= tobby.getDateTime()%>
OK,下面開始我們的測試1.page/request在scope為page或者request的時候,我每一次重新整理頁面或者新開一個頁面,頁面上總是顯示的最新的時間,並且在“構造方法中”“在執行個體方法中”總是成對出現,這說明了當scope為page或者request的時候,每次裝載頁面都會重新調用構造方法產生該bean的一個執行個體,這就導致了頁面上的時間每次都是變化的。(因為在調用構造方法的時候,會執行Date d=new Date(),從而產生一個新的時間)2.sessionok,我現在把scope改為session,再來重新整理頁面或者新開一個頁面進入,看會出現什麼情況。這時會看到任憑你如何重新整理頁面時間都不變了,但是如果新開一個頁面進入時間就和前一個頁面不同了,但之後再怎麼重新整理也不會變了。另外,在剛進入頁面時,會同時出現“構造方法中”“在執行個體方法中”,之後重新整理就只會出現“在執行個體方法中”了。這說明在scope為session時,在同一個session中bean的構造方法會且只會被調用一次,這就是為什麼我們重新整理頁面時間不會變而新開一個頁面時時間會變化的原因 (因為只有在調用構造方法的時候,才會執行Date d=new Date(),從而產生一個新的時間) 。3.applicationlast,把scope改為application,這時候我發現在進入頁面後不管我怎麼重新整理頁面或者是新開一個頁面,時間都不變化了,:(。只有當我把伺服器重啟之後再進入時時間才會發生變化,但之後直至伺服器重啟,時間都不在變化了,而且後台也僅僅只輸出“在執行個體方法中”,這說明當scope為application時,bean的構造方法在整個伺服器的一次運行中,僅被調用一次,因此時間也就一直不變。(因為只有在調用構造方法的時候,才會執行Date d=new Date(),從而產生一個新的時間) 。最後,我們再來做一個測試,把Date d=new Date()移入到getDateTime()這個執行個體方法中,這時候,我們發現無論scope為什麼,每次重新整理頁面或者重新進入一個新頁面時間都會變化。
OK,下面開始我們的測試
1. page/request
在scope為page或者request的時候,我每一次重新整理頁面或者新開一個頁面,頁面上總是顯示的最新的時間,並且在“構造方法中”“在執行個體方法中”總是成對出現,這說明了當scope為page或者request的時候,每次裝載頁面都會重新調用構造方法產生該bean的一個執行個體,這就導致了頁面上的時間每次都是變化的。(因為在調用構造方法的時候,會執行Date d=new Date(),從而產生一個新的時間)
2. session
ok,我現在把scope改為session,再來重新整理頁面或者新開一個頁面進入,看會出現什麼情況。這時會看到任憑你如何重新整理頁面時間都不變了,但是如果新開一個頁面進入時間就和前一個頁面不同了,但之後再怎麼重新整理也不會變了。另外,在剛進入頁面時,會同時出現“構造方法中”“在執行個體方法中”,之後重新整理就只會出現“在執行個體方法中”了。這說明在scope為session時,在同一個session中bean的構造方法會且只會被調用一次,這就是為什麼我們重新整理頁面時間不會變而新開一個頁面時時間會變化的原因 (因為只有在調用構造方法的時候,才會執行Date d=new Date(),從而產生一個新的時間) 。
3. application
last,把scope改為application,這時候我發現在進入頁面後不管我怎麼重新整理頁面或者是新開一個頁面,時間都不變化了,:(。只有當我把伺服器重啟之後再進入時時間才會發生變化,但之後直至伺服器重啟,時間都不在變化了,而且後台也僅僅只輸出“在執行個體方法中”,這說明當scope為application時,bean的構造方法在整個伺服器的一次運行中,僅被調用一次,因此時間也就一直不變。(因為只有在調用構造方法的時候,才會執行Date d=new Date(),從而產生一個新的時間) 。
最後,我們再來做一個測試,把Date d=new Date()移入到getDateTime()這個執行個體方法中,這時候,我們發現無論scope為什麼,每次重新整理頁面或者重新進入一個新頁面時間都會變化。
總結一下bean的scope的作用:每次執行
<jsp:useBean id="tobby" class="test.Test" scope="××"/>時, 伺服器都會在相應的scope中尋找一下有沒有該類的一個叫tobby的執行個體,有則複用,沒有則重新建立一個。以session為例,我第一次進入頁面時 伺服器為建立一個叫tobby的test.Test類的執行個體,並放入session,因此在同一個session中再不會調用該類的構造方法來建立該類的 一個叫tobby執行個體了,因為已經存在了,除非我們用session.removeAttribute(“tobby”)把它幹掉了。其它的scope可 以類比進行解釋了。