JSP中实现网页访问统计的方法.docx
- 文档编号:24511514
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:12
- 大小:17.17KB
JSP中实现网页访问统计的方法.docx
《JSP中实现网页访问统计的方法.docx》由会员分享,可在线阅读,更多相关《JSP中实现网页访问统计的方法.docx(12页珍藏版)》请在冰豆网上搜索。
JSP中实现网页访问统计的方法
JSP中实现网页访问统计的方法
原创2012-09-2115:
13:
17 我来说两句 作者:
wwj_748
网络所得:
未经验证
JSP中实现网页访问统计的方法
最近学习JaveEE中的jsp网页开发,需要实现网页访问量的统计,刚开始不知道如何实现,后来问了一下老师,老师是这样回答我的:
要实现网页访问的统计,你可以利用application对象来实现,不能用seesion对象,因为session是属于同一个会话的,关掉浏览器数据就没有了,而application是在同一浏览器下的,只要是同一个浏览器,将数据保存在applicaiton对象中,这样就可以保证数据的不变性。
其实这些我都懂,我只是不知道如何在jsp用代码实现。
后来我只能上网看看有没有具体的解决方案,搜了很久,没有我想要的答案,我想要实现的只是简单的统计,没有实现更加复杂的功能。
后来还是在CSDN这里找到了答案,在这里简单总结一下实现网页访问统计的几种方法:
1.利用application对象进行统计,得到的效果是每进入一次该网页就统计一次。
但效果不怎么好,因为一般统计网页访问量,刷新是不算进统计里的,这里就是这种缺点。
具体实现是:
[html]
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>
<%
if(application.getAttribute("count")==null){
application.setAttribute("count",newInteger(0));
}
Integercount=(Integer)application.getAttribute("count");
application
.setAttribute("count",newInteger(count.intValue()+1));
count=(Integer)application.getAttribute("count");
%>
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>
<%
if(application.getAttribute("count")==null){
application.setAttribute("count",newInteger(0));
}
Integercount=(Integer)application.getAttribute("count");
application
.setAttribute("count",newInteger(count.intValue()+1));
count=(Integer)application.getAttribute("count");
%>
2.为了解决上面的问题,有了另一种方法,就是同时利用application对象和session对象来统计,这种方法的原理是从打开浏览器到关闭浏览器算是访问一次,刷新、返回等操作不算做一次访问。
但还是有缺陷,当jsp服务器从新启动时,数据也被清零了。
下面还是具体实现:
[html]
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>
<%
intn=0;Stringcounter=(String)application.getAttribute("counter");
if(counter!
=null){
n=Integer.parseInt(counter);
}
if(session.isNew())
++n;
%>
<%
counter=String.valueOf(n);
application.setAttribute("counter",counter);
%>
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>
<%
intn=0;Stringcounter=(String)application.getAttribute("counter");
if(counter!
=null){
n=Integer.parseInt(counter);
}
if(session.isNew())
++n;
%>
<%
counter=String.valueOf(n);
application.setAttribute("counter",counter);
%>
3.第三种方法是将统计数据存储在本地的文件当中,比如存储在一个txt文件当中。
这是为了解决重启服务器之后数据不用担心会丢失。
创建一个类:
JSPCount
[java]
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;
publicclassJSPCount{
//写入文件的方法
publicstaticvoidwrite2File(Stringfilename,longcount){
try{
PrintWriterout=newPrintWriter(newFileWriter(filename));
out.println(count);
out.close();
}catch(IOExceptione){
//TODO:
handleexception
e.printStackTrace();
}
}
//读文件的方法
publicstaticlongreadFromFile(Stringfilename){
Filefile=newFile(filename);
longcount=0;
if(!
file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
write2File(filename,0);
}
try{
BufferedReaderin=newBufferedReader(newFileReader(file));
try{
count=Long.parseLong(in.readLine());
}
catch(NumberFormatExceptione){
//TODO:
handleexception
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}catch(FileNotFoundExceptione){
//TODO:
handleexception
e.printStackTrace();
}
returncount;
}
}
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;
publicclassJSPCount{
//写入文件的方法
publicstaticvoidwrite2File(Stringfilename,longcount){
try{
PrintWriterout=newPrintWriter(newFileWriter(filename));
out.println(count);
out.close();
}catch(IOExceptione){
//TODO:
handleexception
e.printStackTrace();
}
}
//读文件的方法
publicstaticlongreadFromFile(Stringfilename){
Filefile=newFile(filename);
longcount=0;
if(!
file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
write2File(filename,0);
}
try{
BufferedReaderin=newBufferedReader(newFileReader(file));
try{
count=Long.parseLong(in.readLine());
}
catch(NumberFormatExceptione){
//TODO:
handleexception
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}catch(FileNotFoundExceptione){
//TODO:
handleexception
e.printStackTrace();
}
returncount;
}
}
在WebRoot目录下建jsp文件:
count.jsp
[plain]
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>
<%@pageimport="org.wwj.count.JSPCount"%>
<%
JSPCountCountFileHandler=newJSPCount();
//读取文件
longcount=CountFileHandler.readFromFile(request.getRealPath("/") +"count.txt");
count=count+1; //修改记录+1
out.print(count); //显示数据
//更新文件内容。
CountFileHandler.write2File(request.getRealPath("/") +"count.txt",count);
%>
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>
<%@pageimport="org.wwj.count.JSPCount"%>
<%
JSPCountCountFileHandler=newJSPCount();
//读取文件
longcount=CountFileHandler.readFromFile(request.getRealPath("/") +"count.txt");
count=count+1; //修改记录+1
out.print(count); //显示数据
//更新文件内容。
CountFileHandler.write2File(request.getRealPath("/") +"count.txt",count);
%>
程序运行之后会在tomcat下的webapps目录下的对应的web项目生成一个count.txt文本文件
4.第三种方法,只是保存了访问的统计数据罢了,但没有保证刷新页面的时候不会自增,这样还是不好。
当然总会有解决的办法的,一般的解决方案就是结合各种方案的优点。
下面是由session对象+application对象+txt文本来实现网站的访问统计。
[java]
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.http.HttpServlet;
publicclassCounterextendsHttpServlet{
//写入文件的方法
publicstaticvoidwrite2File(Stringfilename,longcount){
try{
PrintWriterout=newPrintWriter(newFileWriter(filename));
out.println(count);
out.close();
}catch(IOExceptione){
//TODO:
handleexception
e.printStackTrace();
}
}
//读文件的方法
publicstaticlongreadFromFile(Stringfilename){
Filefile=newFile(filename);
longcount=0;
if(!
file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
write2File(filename,0);
}
try{
BufferedReaderin=newBufferedReader(newFileReader(file));
try{
count=Long.parseLong(in.readLine());
}
catch(NumberFormatExceptione){
//TODO:
handleexception
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}catch(FileNotFoundExceptione){
//TODO:
handleexception
e.printStackTrace();
}
returncount;
}
}
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.http.HttpServlet;
publicclassCounterextendsHttpServlet{
//写入文件的方法
publicstaticvoidwrite2File(Stringfilename,longcount){
try{
PrintWriterout=newPrintWriter(newFileWriter(filename));
out.println(count);
out.close();
}catch(IOExceptione){
//TODO:
handleexception
e.printStackTrace();
}
}
//读文件的方法
publicstaticlongreadFromFile(Stringfilename){
Filefile=newFile(filename);
longcount=0;
if(!
file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
write2File(filename,0);
}
try{
BufferedReaderin=newBufferedReader(newFileReader(file));
try{
count=Lo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 实现 网页 访问 统计 方法