23.3网站计数器

作者: 青椒盖饭 | 来源:发表于2018-11-02 15:45 被阅读1次
    • 通过io操作实现一个网站计数器,如果一个网站要记录从开站开始到今天的访问人数
    • 该技术有以下注意问题
    1. 该计数器必须在网站宕机之后可以将数据保存下来
    2. 考虑到计数器的访问量可能很大,所以不应该使用int类型,可以使用long或者Biginteger
    3. 如果要进行访问肯定是一个用户第一次打开才会开始计数
    4. 如果要进行数据的修改处理操作,那么一定会牵扯到一个同步的问题
    • 现在web项目的根目录处建立一个count.txt文件,这个文件描述的就是初期的访问量数,可以设置为0
    image.png
    • 建立一个访问技术的程序文件:count_info.jsp
    <%@ page pageEncoding="utf-8"%>
    <%@ page import="java.util.*"%>
    <%@ page import="java.io.*"%>
    <%
        request.setCharacterEncoding("utf-8");
        
    %>
    <%!
        //定义读取文件的名称
        public static final String COUNT_FILE = "/count.txt";
        //定义读取文件的方法
        public long read()throws Exception{
            long count = 0;
            File file = new File(this.getServletContext().getRealPath(COUNT_FILE));
            Scanner scanner = new Scanner(file);
            if(scanner.hasNext()){
                count = Long.parseLong(scanner.next());
            }
            scanner.close();
            return count;
        }
        //定义写入文件的方法
        //考虑到多个用户同时访问的问题,所以使用synchronized同步方法,以保证数据的准确性
        //考虑到网站的读取速度,在写入文件的同时返回读取文件的内容
        public long save()throws Exception{
            //先获取到原文件中的数据
            long orgCount = read();
            orgCount++;
            PrintStream ps = new PrintStream(new File(this.getServletContext().getRealPath(COUNT_FILE)));
            ps.print(orgCount);
            //一定要关闭文件流
            ps.close();
            return orgCount;
        }
    %>
    <%
        long count = 0;
        //判断本次是否是一个新的用户访问,或者是新的一个页面访问
        if(session.isNew()){
            //如果是一个新的用户则进行计数更新
            count = save();
        }else{
            //如果不是新用户,则得到原有的访问数
            count = read();
        }
    %>
    <h1><%=count%></h1>
    
    • 以上的程序却是考虑到了同步问题,但是过多的同步会导致页面浏览数速度变慢,所以在实际开发会使用更高级的技术完成网站计数器的功能

    相关文章

      网友评论

        本文标题:23.3网站计数器

        本文链接:https://www.haomeiwen.com/subject/rfaqxqtx.html