码迷,mamicode.com
首页 > Web开发 > 详细

网站计数的实现jsp

时间:2015-04-14 23:31:34      阅读:335      评论:0      收藏:0      [点我收藏+]

标签:计数器   访问量   多线程   博客   网站   

在一些博客或论坛里经常出现一些访问次数的字样,这就是通常说的网站计数器。进行网站计数器开发需要注意以下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


网站计数的实现jsp

标签:计数器   访问量   多线程   博客   网站   

原文地址:http://melorogee.blog.51cto.com/6909056/1632654

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!