JSP页面中实现网页访问量的统计

时间:2023-01-18 04:34:15

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