我用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++; 

这个函数没有得到执行.好奇怪哦.有人知道原因么?

解决方案 »

  1.   

    counter作为一个局部变量自然不会有变换
    要用static counter = 0
    全局化
      

  2.   

    用全局变量应该也不可以!
    点击率用page
    统计在线人数用session(但是不是非常的精确)
    用局部变量,每次request会产生新的值的!
      

  3.   

    最好用application做,用session的话,如果服务器重启就清零了。
      

  4.   

    认真看下啊,karlapan01,不要乱说话.
      

  5.   

    我要什么答案,我要什么源码?要段源码我直接抄了,来问这个干嘛啊.我是说我的这段代码为什么不能运行.1楼和2楼说的都不对,我确信语法应该是没问题的,这也没有讨论什么session和application.我只是好奇怪这段代码怎么不能正确运行.我找了很多次,可是还是找不到原因.
      

  6.   

    <%!int   counter=0;   
    synchronized   void   counterFunction()   
    {   
    counter++;   
    }   
    %>
    你的源码中 .   synchronized  这是什么类型的方法?我没见过...
      

  7.   

    to nighteagle82 :
      synchronized是用实现同步,避免几个用户同一时间实现counter++,to for_cyan :
      jsp 最终是转化为 servlet , <%! ... %>最终是转化为servlet的init()方法,而servlet是单态的,因而其只进行一次初始化,因而只会运行一次int counter = 0 进行初始化,下一个用户来访问时只是直接调用<%..%>里面的方法,而不会再调用int counter = 0 ;
    LZ,你的代码没错,我运行了,正常
      

  8.   

    每次你刷新这个页面的时候都要设定count=0因次都是0
    你最好在设置一个参数 用于防置上次count的值,就是如他们说的那样
    用session或者别的什么。我不知道我说的对不,你试下吧
      

  9.   

    还有就是哪个count++是不是应该用到this啊 
    告诉就是上面的哪个count啊。
    我很久以前做过一个玩 
    原理很简单也没出错啊 
      

  10.   

    哈哈 我找到了你看看
    <%
    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));
    %>
      

  11.   

    to 楼上的:
      每次你刷新这个页面的时候都要设定count=0因次都是0 ;每次刷新是不会设置count=0的,因为jsp最终是转为servlet的,而servlet自servlet容器载入后只会进行一次初始化,因为其是单态的,因而刷新页面根本就不会存在count=0重复设置的问题