標籤:gb2312 img man sso html ext tracking server charset
1、在”<%!”和”%>”之間聲明方法,該方法在整個JSP頁面有效。可是該方法內定義的變數僅僅在該方法內有效。
這些方法將在Java程式片中被調用,當方法被調用時,方法內定義的變數被分配記憶體,調用完成就可以釋放記憶體。當多個客戶同一時候請求一個JSP頁面時,他們可能用法操作成員變數,對這樣的情況應給予重視。
解決的方法:通過synchronized方法操作一個成員變數來實現一個計數器
<%@ page contentType="text/html;charset=GB2312"%><HTML><BODY BGCOLOR=cyan><FONT Size=4><%! int number=0; synchronized void countPeople() { number++; } %> <% countPeople(); %><p>您是第 <%=number%> 個訪問本站的客戶。<p></FONT></BODY></HTML>
執行效果:
上面這個範例,假設Tomcatserver又一次啟動就會重新整理計數器,因此計數又重0開始。在以下這個範例。我們使用Java的輸入輸出資料流技術。將計數儲存到檔案,當客戶訪問該JSP頁面時,就去讀取這個檔案,將server又一次啟動之前的計數讀入。並在次基礎上添加1,然後將新的計數寫入到檔案。
<%@ page contentType="text/html;charset=GB2312"%><%@ page import="java.io.*"%><HTML><BODY BGCOLOR=cyan><FONT Size=4><%! int number=0; File file=new File("count.txt"); synchronized void countPeople() { if(!file.exists()){ number++; try{ file.createNewFile(); FileOutputStream out=new FileOutputStream("count.txt"); DataOutputStream dataOut=new DataOutputStream(out); dataOut.writeInt(number); out.close(); dataOut.close(); }catch(IOException ee){} } else{ try{ FileInputStream in=new FileInputStream("count.txt"); DataInputStream dataIn=new DataInputStream(in); number=dataIn.readInt(); number++; in.close(); dataIn.close(); FileOutputStream out=new FileOutputStream("count.txt"); DataOutputStream dataOut=new DataOutputStream(out); dataOut.writeInt(number); out.close(); dataOut.close(); }catch(IOException ee){} } } %> <% countPeople(); %><p>您是第 <%=number%> 個訪問本站的客戶。<p></FONT></BODY></HTML>
執行效果:
jsp 中聲明方法的使用