zoukankan      html  css  js  c++  java
  • JSP简单练习-站点计数器

    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page import="javax.servlet.*" %>
    <html>
    <head>
    <title>站点计数器</title>
    </head>
    <body>
       <%!
          synchronized void countPeople()
          {  // 串行化计数函数
             ServletContext application=((HttpServlet)(this)).getServletContext();
             Integer number=(Integer)application.getAttribute("Count");
             if(number==null)
             {  // 假设是第1个訪问本站
                number=new Integer(1);
                application.setAttribute("Count", number);
             }
             else
             {
                number=new Integer(number.intValue()+1);
                application.setAttribute("Count",number);
             }
          }
       %>
       <%
          if(session.isNew())
          {  // 假设是一个新的会话
             out.println("是一个新会话!");
             countPeople();
          }
          Integer yourNumber=(Integer)application.getAttribute("Count");
          out.println(yourNumber);
       %>
       <p>欢迎訪问本站,你是第
          <%=yourNumber %>
               个訪问用户。
    </body>
    </html>

    程序利用synchronizekeyword对计数函数进行了串行化(有的书中叫序列化),以确保当两个client同一时候訪问网页而改动计数值时不会产生冲突;getServletContext()方法来得到application对象,由于有些Webserver并不直接支持application对象,必须先得到其上下文;假设还是第一个訪问的客户,则前面代码中得到的number会是空值,故置初始值为1,否则做增1处理;假设是一个新的会话则调用计数函数,得到计数值并将其显示。

    能够发现,当刷新页面时,其数值并不会添加,仅仅有关闭了本站点的全部窗体再又一次訪问时,才会增1,由于这又是一个新的会话。


  • 相关阅读:
    修理牛棚 贪心 USACO
    零件加工 贪心 题解
    花店橱窗 动态规划 题解
    动态规划 摆花 题解
    NOIP2004普及组第3题 FBI树
    实况世界杯4小游戏链接
    poj2761(treap入门)
    最大连续子序列和(分治法)
    任意区间的最长连续递增子序列,最大连续子序列和
    lca转RMQ
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4042750.html
Copyright © 2011-2022 走看看