Jsp標籤掉JavaBean屬性實現計數器功能應注意的問題

      作者:王奎           歡迎訪問我的網站:www.marksaas.com

今天在看書的時候看到一個關於用Jsp標籤調用JavaBean 實現計數器功能的例子,我咋一看調用的順序和最後的結果明顯不符,就做了個小實驗,並用debug模式跟蹤調用的過程,結果果然證明文章中是錯的,好了,不多廢話了,下面是原文章中的實例代碼:

Counter.java

package cn.xd.model;

public class Counter {
	private long  counter;
	public long getCounter(){
		return counter;
	}
	public void setCounter(long counter){
		this.counter=counter+1;
	}
}
Counter.jsp

<body>
    <jsp:useBean id="counter" scope="application" class="cn.xd.model.Counter" />
    <%
    	if(session.isNew()){
    		long temp=counter.getCounter();
	counter.setCounter(temp);
    	}
    %>
    you are the <jsp:getProperty name="counter" property="counter"/><br/>person.
  </body>

首先來說一下運行後的問題吧,首先解釋一下Jsp代碼,主要功能是掉用Javabean來實現計數功能的,但是你做實驗你好發現,每次會話顯示的都是0,當你用斷點調試是你會發現在Counter.java代碼的getCounter方法報錯了,是out of synch,執行完getCounter後程序返回了,並沒有執行Jsp中的counter.setCounter(temp);

現在來改正一下這段代碼再看一下。

Counter.java

package cn.xd.model;

public class Counter {
	private long  counter;
	public void setCounter(){
		counter++;
	}
}
Counter.jsp

 <jsp:useBean id="counter" scope="application" class="cn.xd.model.Counter" />
    <%
    	if(session.isNew()){
    		counter.setCounter();
    	}
    %>
    you are the <jsp:getProperty name="counter" property="counter"/><br/>person.
  </body>

這你你再運行時結果就對了。

說明:我用的瀏覽器是火狐和Chrome,單打開一個窗口時不計數,原因是session生命週期也和cookie有關,必須重新打開瀏覽器才能計數。。

注意:

在web環境下調用Javabean一定要注意bean的作用範圍,和特性。。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章