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


  • 相关阅读:
    /proc/interrupts 和 /proc/stat 查看中断的情况
    publish and submit
    camera shading比例
    高负载linux调优
    linux网络socket 接口转
    深入分析linux调度机制
    大型网站架构之分布式消息队列
    Linux下高并发socket最大连接数所受的各种限制(详解)
    Linux服务器高并发实践经历
    oracle: 分割字符串,或者查找字段里面的关键字(关键字1,关键字2,关键字3)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4042750.html
Copyright © 2020-2023  润新知