0

我尝试使用应用程序对象来记录有多少访问者查看了这个页面,但是在我刷新页面后我关闭了浏览器,当我再次打开浏览器查看这个页面时,记录又回到了我开始刷新的数量。我不知道为什么?

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
    <body>
        <%
            Integer count;
            synchronized (application) {
                count = (Integer) application.getAttribute("count");
                if(count == null)
                    count = new Integer(0);
                count = new Integer(count.intValue() + 1);
                application.setAttribute("count", count);
            }
        %>
        This page has been visited <%= count.intValue() %> times!
    </body>
</html>
4

2 回答 2

0

为什么要同步?为什么不只使用全局变量(即 java static)?

您不必担心网络服务器上的线程。它应该处理那个。

服务器上的全局变量对于所有线程都是相同的。

示例在这里http://www.tutorialspoint.com/jsp/jsp_hits_counter.htm

它说使用:

application.setAttribute(String Key, Object Value);

然后用 ..

application.getAttribute(String Key);

一个例子:

<%
    Integer hitsCount = (Integer)application.getAttribute("hitCounter");
    if( hitsCount ==null || hitsCount == 0 ){
       /* First visit */
       out.println("Welcome to my website!");
       hitsCount = 1;
    }else{
       /* return visit */
       out.println("Welcome back to my website!");
       hitsCount += 1;
    }
    application.setAttribute("hitCounter", hitsCount);
%>

<p>Total number of visits: <%= hitsCount%></p>
于 2012-04-26T20:38:47.947 回答
0

如果您正在使用带有控制器的某种框架,您也可以public static Integer count在控制器端使用每次调用处理程序方法时将计数增加 1 并将计数放入该页面的模型中。

于 2012-04-26T21:03:40.107 回答