要想實現儲存訪問量資料,不能使用session,因為session是屬於同一個會話的,關閉瀏覽器後,資料就沒有了。因此可以使用application對象實現,因為application是屬於同一個瀏覽器下的,只要是使用同一個瀏覽器訪問,就可以儲存資料。但是要想永久儲存訪問量資料,可以將資料儲存在檔案中,例如txt檔案。
因此使用session對象+application對象+txt檔案
下面是實現過程:
建立一個Count.java類:
package com.sunlawer.servlet;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.PrintWriter;import javax.servlet.http.HttpServlet;/** * 統計訪問量 * @author sun * */public class Counter extends HttpServlet{private static final long serialVersionUID = 1L;/** * 寫入檔案的方法 * @param filename * @param count */public static void writeFile(String filename,long count){try{PrintWriter out=new PrintWriter(new FileWriter(filename));out.println(count);out.close();}catch(Exception e){e.printStackTrace();}}/** * 讀檔案的方法 * @param filename * @return */public static long readFromFile(String filename){File file=new File(filename);long count=0;if(!file.exists()){try{file.createNewFile();}catch(Exception e){e.printStackTrace();}writeFile(filename,0);}try{BufferedReader in=new BufferedReader(new FileReader(file));try{count=Long.parseLong(in.readLine());}catch(Exception e){e.printStackTrace();}}catch(FileNotFoundException e){e.printStackTrace();}return count;}}
在JSP頁面上顯示訪問量的實現
例如在anli.jsp檔案中:
<% Counter CountFileHandler=new Counter(); long count=0; if(application.getAttribute("count")==null){ count=CountFileHandler.readFromFile(request.getRealPath("/")+"count.txt"); application.setAttribute("count", new Long(count)); } count=(Long)application.getAttribute("count"); if(session.isNew()){ count++; application.setAttribute("count", count); //更新檔案目錄 CountFileHandler.writeFile(request.getRealPath("/")+"count.txt", count); } %> 點擊量:<%=count %>