標籤:網站計數器
<%@ page contentType="text/html;charset=gb2312" %><%@ page import="javax.servlet.*" %><html><head><title>網站計數器</title></head><body> <%! synchronized void countPeople() { // 序列化計數函數 ServletContext application=((HttpServlet)(this)).getServletContext(); Integer number=(Integer)application.getAttribute("Count"); if(number==null) { // 如果是第1個訪問本站 number=new Integer(1); application.setAttribute("Count", number); } else { number=new Integer(number.intValue()+1); application.setAttribute("Count",number); } } %> <% if(session.isNew()) { // 如果是一個新的會話 out.println("是一個新會話!"); countPeople(); } Integer yourNumber=(Integer)application.getAttribute("Count"); out.println(yourNumber); %> <p>歡迎訪問本站,你是第 <%=yourNumber %> 個訪問使用者。</body></html>
程式利用synchronize關鍵字對計數函數進行了序列化(有的書中叫序列化),以確保當兩個用戶端同時訪問網頁而修改計數值時不會產生衝突;getServletContext()方法來得到application對象,因為有些Web伺服器並不直接支援application對象,必須先得到其上下文;如果還是第一個訪問的客戶,則前面代碼中得到的number會是空值,故置初始值為1,否則做增1處理;如果是一個新的會話則調用計數函數,得到計數值並將其顯示。
可以發現,當重新整理頁面時,其數值並不會增加,只有關閉了本網站的所有視窗再重新訪問時,才會增1,因為這又是一個新的會話。
JSP簡單練習-網站計數器