jsp 中聲明方法的使用

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>

運行效果:


上面這個例子,如果Tomcat服務器重新啓動就會刷新計數器,因此計數又重0開始,在下面這個例子,我們使用Java的輸入輸出流技術,將計數保存到文件,當客戶訪問該JSP頁面時,就去讀取這個文件,將服務器重新啓動之前的計數讀入,並在次基礎上增加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>

運行效果:



發佈了123 篇原創文章 · 獲贊 28 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章