在jsp中使用应用程序时计数错误

时间:2012-04-26 20:33:12

标签: jsp

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

<%@ 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>

2 个答案:

答案 0 :(得分:0)

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

您不必担心Web服务器上的线程。它应该处理它。

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

此处示例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>

答案 1 :(得分:0)

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