网站计数的实现jsp

在一些博客或论坛里经常出现一些访问次数的字样,这就是通常说的网站计数器。进行网站计数器开发需要注意以下3个问题:

1、网站的来访人数很多,所以必须用大整数来表示;

2、每个用户在第一次访问时需要计数,重复刷新页面不应该重复计数;

3、对网站访问量计数值的修改属于多线程操作,需要进行同步操作。

编写的模拟网站计数器的jsp代码如下所示:

  1. <%@ page contentType="text/html" pageEncoding="GBK"%>  

  2. <%@ page import="java.io.*"%>      <%--由于要使用IO操作,必须导入java.io包--%>  

  3. <%@ page import="java.util.*"%>     <%--Scanner在java.util中定义--%>  

  4. <%@ page import="java.math.*"%>    <%--BigInteger定义在java.math中--%>  

  5. <html>  

  6. <head>  

  7.     <title>网站计数器</title>  

  8. </head>  

  9. <body>  

  10. <%!  

  11.     BigInteger count = null;  

  12. %>  

  13. <%!//以下方法为了省事,直接在方法中处理了异常,而实际中要交给调用处处理  

  14.     public BigInteger load(File file) {    //读取计数文件  

  15.         BigInteger count = null;            //读取接受的数据  

  16.         try {  

  17.             if(file.exists()) {  

  18.                 Scanner scan = null;  

  19.                 scan = new Scanner(new FileInputStream(file));  //从文件中读取  

  20.                 if(scan.hasNext()) {  

  21.                     count = new BigInteger(scan.next());    //将内容放到BigInteger中  

  22.                 }  

  23.                 scan.close();                   //关闭输入流  

  24.             } else {  

  25.                 count = new BigInteger("0");            //第一次访问  

  26.                 save(file,count);  

  27.             }  

  28.         } catch(Exception e) {  

  29.             e.printStackTrace();  

  30.         }  

  31.         return count;                           //返回读取后的数据  

  32.     }  

  33.     public void save(File file,BigInteger count) {  

  34.         try {  

  35.             PrintStream ps = null;                  //定义输出流对象  

  36.             ps = new PrintStream(new FileOutputStream(file));       //打印流对象  

  37.             ps.println(count);  

  38.             ps.close();  

  39.         } catch(Exception e) {  

  40.             e.printStackTrace();  

  41.         }  

  42.     }     

  43. %>  

  44. <%  

  45.     String fileName = this.getServletContext().getRealPath("/") + "count.txt";   //文件路径  

  46.     File file= new File(fileName);  

  47.     if(session.isNew()) {  

  48.         synchronized(this) {  

  49.             count = load(file);  

  50.             count = count.add(new BigInteger("1"));     //自增操作  

  51.             save(file,count);  

  52.         }  

  53.     }  

  54. %>  

  55. <h3>你是第<%=count==null?0:count%>位访客</h3>           <%--输出内容--%>  

  56. </body>  

  57. </html>  

复制代码

这段代码的运行结果为:


当第一次访问这个页面显示“你是第1位访客”,刷新页面显示不变,如下图所示;

技术分享


关闭浏览器用新的浏览器打开这个页面时显示“你是第2位访客”,如下图所示:

技术分享

 

更多 java学习,java资料 http://techfoxbbs.com


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。