要想实现保存访问量数据,不能使用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; } }
例如在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 %>