淺析jsp中usebean的範圍

來源:互聯網
上載者:User
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可 以類比進行解釋了。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.