作者:王奎 歡迎訪問我的網站: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的作用範圍,和特性。。