我采用的是jsp网页,但是不管采用什么语言,原理是一样的。最近在完善暑假做的一个简单年级网站,遇到很多问题。我想很多新手都会遇到这些问题,就把自己的心得体会分享给大家。因为我找到的解决方法,也是很多网友分享的。
    第一种,单页面统计。就是说,只要点击这个页面就会统计一次。

<%@ page contentType="text/html;charset=GB2312"  %>
<html><head><title>java计数器程序片 </title></head><body><%!//在这种标记中定义的变量为全局变量int count=0;synchronized void count(){count++;}%><%count();out.println("这是第"+count+"个访问者!");%></body>
</html>

 第二中,是利用jsp的内置对象application进行统计。这个程序结果运行分析,也是访问一次页面统计一次。感觉还是不够好。真正满意的是浏览器打开网页,到关闭网页算一次,这样统计比较实际。

<%@ page contentType="text/html;charset=GB2312" %>
<html><head><title>java计数器程序</title></head><body><%if(application.getAttribute("count")==null){application.setAttribute("count",new Integer(0));}Integer count=(Integer)application.getAttribute("count");application.setAttribute("count",new Integer(count.intValue()+1));count=(Integer)application.getAttribute("count");%><center>这是第<%=count.intValue()%>个访问者!</center></body>
</html>第三中,利用jsp的application和session进行统计。它的原理是,访问者打开浏览器到关闭浏览器算一次访问。每次打开首页,创建一个session,这个session直到浏览器关闭才失效。但总体来说,比前两种要好。  但是有一个一个缺陷,那就是当jsp服务器重启时,累计的统计数就清零了。<%
int n=0;
String count=(String)application.getAttribute("counter");
if(counter!=null) n=Integer.parseInt(counter);
if(session.isNew()) ++n;
out.print("你是第"+n+"位访客");
counter=String.valueOf(n);
application.setAttribute("counter",counter);
%> 第四种方案,就是保存到txt文本中,那样重启服务器也不会丢失了。写一个severlet
counter.java
package com.benb.servlet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class counter {

public static void writeFile(String filename, long count) {

try {
    PrintWriter out = new PrintWriter(new FileWriter(filename));
    out.println(count);
    out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
}

public static long readFile(String filename) {
   File f = new File(filename);
   long count = 0;
   if (!f.exists()) {
    writeFile(filename, 0);
   }
   try {
    BufferedReader in = new BufferedReader(new FileReader(f));
    try {
     count = Long.parseLong(in.readLine());
    } catch (NumberFormatException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
   return count;
}
}

下面是你要计数的jsp页面,在里面添上以下内容就ok了

<%@ page import="com.benb.servlet.counter"%>  
<%
counter CountFileHandler=new counter();  //创建对象
long count=CountFileHandler.readFile(request.getRealPath("/")+"
count.txt");
//读取文件获取数据赋给count
count=count+1;//修改记录,数据加1
out.println(count);//显示记录数
CountFileHandler.writeFile(request.getRealPath("/")+"count.txt",
count);//更新文件记录
%>

但是还是不是很好,也是每次访问首页就计数一次。怎么样百分百满意呢?
最后一种方法,session和application加文本保存结合就完美了,不管重启服务器,还是能百分百记录所有的访问记录。
写一个severlet类似前面,就是long类型改成int类型。
package com.tozhan.cn;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class Counter extends HttpServlet {

private static final long serialVersionUID = 1L;

public Counter() {
        super();
    }
    public static void writeFile(String filename,int count){
       
        try{
            PrintWriter  out=new PrintWriter(new FileWriter(filename));
            out.println(count);
            out.close();
        }catch(IOException e){
             e.printStackTrace();
        }
    }
   
    public static int readFile(String filename) {
        File f = new File(filename);
        int count = 0;
        if(!f.exists()){
             writeFile(filename, 0);
        }
        try{
            BufferedReader in = new BufferedReader(new FileReader(f));
            try{
                count = Integer.parseInt(in.readLine());   
            }catch(NumberFormatException e){
                e.printStackTrace();   
        }catch(IOException  e){
            e.printStackTrace();
             }
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
            }
        return count;
    }

public void init() throws ServletException {
        // Put your code here
    }

}
页面编码如下

<%@ page language="java"  import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.tozhan.cn.GetDataDB" %>
<%@ page import="com.tozhan.cn.news.New" %>
<%@ page import="com.tozhan.cn.Counter" %>
<%
    Counter CountFileHandler=new Counter();//创建对象
    int count=0;
    if(application.getAttribute("count")==null){
    count=CountFileHandler.readFile(request.getRealPath("/")+"count.txt");//读取文件获取数据赋给count
    application.setAttribute("count",new Integer(count));
  }
  count=(Integer)application.getAttribute("count");
  if(session.isNew()) ++count;
  application.setAttribute("count",count);
  CountFileHandler.writeFile(request.getRealPath("/")+"count.txt",
count);//更新文件记录
%>
<p>我们的友谊海枯石烂! 你是第&nbsp;<%=count %>&nbsp;位访客</p>
嘿嘿,,,最后一种方法是我自己总结的,利用前面找到的知识。好了,分享给大家。

网站统计访问次数的方法相关推荐

  1. web核心 4-response响应对象 servletContext对象 响应行响应体 请求转发 重新定向 从服务器下载与上传资源 切换验证码 网站统计访问次数

    内容介绍 1 ServletContext对象2 response响应对象 ServletContext对象 概述 ServletContext:servlet的上下文对象(全局管理者) 一个项目有且 ...

  2. 编写一个Servlet,实现统计网站被访问次数的功能

    编写一个Servlet,实现统计网站被访问次数的功能 1弄清楚如何储存你访问的记录的次数这题就很好解决了 (a)getAttribute(java.lang.String name) 返回具有给动名字 ...

  3. 用Servlet实现统计网站被访问次数的功能

    思路: 1.新建一个Servlet类继承HttpServlet,重写doGet()和doPost()方法: 2.在doPost方法中调用doGet()方法,在doGet()方法中实现统计网站被访问次数 ...

  4. JavaWeb程序设计任务教程(黑马程序员 传智播客)测一测 编写一个Servlet,实现统计网站被访问次数的功能

    详细解释已在注释中给出 package 统计网站被访问次数;import java.io.*;import javax.servlet.*; import javax.servlet.http.*;p ...

  5. Python修改私有变量、统计访问次数、华摄氏度转换

    Python笔记Day7 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中, 实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问, ...

  6. Java-根据IP统计访问次数

    JSP根据IP统计访问次数 本文简要介绍如何实现一个IP访问计数器. 为了简单, 使用 JSP 来实现, 但读者需要明白, Java代码可以在到处运行. 示例Demo页面: http://www.cn ...

  7. 上下文监听,网站得访问次数,修改项目路径后数据库更新数据

    1.修改Path: 一般创建完项目后,可能会对项目名进行更改,步骤:双击tomcat→modules→path→Edit→修改Path即可.  2.创建上下文监听: 上下文监听实现ServletCon ...

  8. php移动签批源码_PHP让网站移动访问更加友好方法

    PHP都是在服务器上处理的,所以当代码到达用户时,它只是HTML. 基本上,用户从你的服务器请求你网站的一个页面,然后你的服务器运行所有的PHP并向用户发送PHP的结果. 设备实际上从未看到或必须使用 ...

  9. html%3c arial%3e,【博客园】样式美化+网站统计访问+添加网易云背景音乐

    该样式对应的皮肤:SimpleMemory,请记得更换. 还有目录生成代码默认是生成h2,h3的,需结合自己的需要替换为h1,h2的. 我参考别人的教程,对博客园样式做了修改.后来忽然被原创发消息:说 ...

最新文章

  1. mysql jdbc 协议_JDBC-MySql
  2. 递归求n的阶层算法实现
  3. 【软件质量】软件设计要考虑性能
  4. linux安装selenium+chrome+phantomjs
  5. 和docket的第一次亲密接触
  6. Java性能优化之String字符串优化,BAT 面试官 如何面试
  7. mysql到底可不可以使用join_《Mysql 到底可不可以使用 Join ?》
  8. python接口自动化4-绕过验证码登录(cookie) (转载)
  9. linux查看及修改文件权限以及相关
  10. 使用js制作完整轮播图 (解决最后一张切换到前面一张的动画问题)
  11. 使用fmt:formatNumber 标签接收后端数据并格式化
  12. X站全称是什么_工作中学习-没有校惯导之前为什么PFD不显示飞机姿态,而IFSD却能显示...
  13. 【我的第一个目标检测课题】2、薅一把Google的羊毛!使用Colaboratory链接谷歌云盘在线进行网络训练
  14. 服务器多开安卓系统,云服务器安卓多开
  15. 卡尔曼滤波 预测与测量我们更应该相信谁?
  16. TPAMI 2021 | 深度学习行人重识别综述与展望
  17. 《吴军阅读与写作讲义》笔记
  18. 开启win7 Aero效果
  19. 中兴智能视觉大数据报道:人脸识别改变未来生活
  20. python文件换行符_python3 读写文件换行符的方法

热门文章

  1. java语言的Dao层设计(一)—— Dao层基本结构设计
  2. 考研 计算机组成原理大纲,2020计算机组成原理考研大纲解析
  3. 牛刀小试基本语法,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本语法和变量的使用EP02
  4. outlook邮件开发开发HTML,CSS标签及样式失效总结
  5. 联通的无限流量套餐,比移动好很多
  6. 解决kubernetes宿主机top cpu wa io过高引起的cpu资源耗尽问题
  7. 初学python选择哪个软件_初学 Python 需要安装哪些软件?
  8. python中docx模块的使用_Python-使用.docx模块
  9. pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
  10. Git安装与使用教程