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