我用tomcat配置了一个服务器,然后在里面写了这样一个jsp网页:
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<body>
<%!int counter=0;
synchronized void counterFunction()
{
counter++;
}
%>
<%counterFunction();%>
网站计数器<br>
您是第<%=counter%>位访问者
</body>
</html>
,然后用127.0.0.1:8080访问该网页,可是怎么搞网页只是显示”您是第0位访问者"怎么刷新还是访问者为零,我觉得synchronized void counterFunction()
{
counter++;
}
这个函数没有得到执行.好奇怪哦.有人知道原因么?
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<body>
<%!int counter=0;
synchronized void counterFunction()
{
counter++;
}
%>
<%counterFunction();%>
网站计数器<br>
您是第<%=counter%>位访问者
</body>
</html>
,然后用127.0.0.1:8080访问该网页,可是怎么搞网页只是显示”您是第0位访问者"怎么刷新还是访问者为零,我觉得synchronized void counterFunction()
{
counter++;
}
这个函数没有得到执行.好奇怪哦.有人知道原因么?
要用static counter = 0
全局化
点击率用page
统计在线人数用session(但是不是非常的精确)
用局部变量,每次request会产生新的值的!
synchronized void counterFunction()
{
counter++;
}
%>
你的源码中 . synchronized 这是什么类型的方法?我没见过...
synchronized是用实现同步,避免几个用户同一时间实现counter++,to for_cyan :
jsp 最终是转化为 servlet , <%! ... %>最终是转化为servlet的init()方法,而servlet是单态的,因而其只进行一次初始化,因而只会运行一次int counter = 0 进行初始化,下一个用户来访问时只是直接调用<%..%>里面的方法,而不会再调用int counter = 0 ;
LZ,你的代码没错,我运行了,正常
你最好在设置一个参数 用于防置上次count的值,就是如他们说的那样
用session或者别的什么。我不知道我说的对不,你试下吧
告诉就是上面的哪个count啊。
我很久以前做过一个玩
原理很简单也没出错啊
<%
int org = 0;
int count = 0;
try {
org = Integer.parseInt(config.getInitParameter("counter"));
count = Integer.parseInt((application
.getAttribute("config_counter").toString())); } catch (Exception e) { }
if (count < org) {//如果count>otg则证明在服务器开启以后 次页面被访问过,因此count就是被访问过的次数
count = org;
}
out.print("此页面已经访问了" + count + "次!");
count++;
application.setAttribute("config_counter", new Integer(count));
%>
每次你刷新这个页面的时候都要设定count=0因次都是0 ;每次刷新是不会设置count=0的,因为jsp最终是转为servlet的,而servlet自servlet容器载入后只会进行一次初始化,因为其是单态的,因而刷新页面根本就不会存在count=0重复设置的问题