我尝试使用应用程序对象来记录有多少访问者查看了此页面,但在我刷新页面后我关闭了浏览器,当我再次打开浏览器查看此页面时,记录回到我开始的数字刷新。我不知道为什么?
<%@ 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>
答案 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并将计数放入模型中页。