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,由于这又是一个新的会话。


  • 相关阅读:
    [匈牙利] 洛谷 P2526 小狗散步
    [匈牙利] 洛谷 P1129 矩阵游戏
    [树形dp] Jzoj P5233 概率博弈
    [线段树] Jzoj P4231 寻找神格
    [状压dp][期望] 洛谷 P2473 奖励关
    [倍增][双向链表] Jzoj P3101 开车旅行
    [高精度][数学] Jzoj P3771 小Z的烦恼
    [并查集][排序] Jzoj P2940 生成输入数据
    [dfs][概率] Jzoj P2941 贿赂
    [权值线段树] Jzoj P4417 神奇的字符串
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4042750.html
Copyright © 2011-2022 走看看