为何session.isNew()刷新页面后总会返回TRUE

为什么session.isNew()刷新页面后总会返回TRUE
小白最近刚接触JSP,在用session对象写一个防刷新计数器时遇到了问题。理想情况下是刷新页面时计数器不+1,仅当关闭浏览器再重新打开时才会+1;可是在Eclipse JavaEE的内部浏览器测试时刷新网页计数器也会+1,不知道出了什么问题,下面贴出代码,恳请各位前辈指教
<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <%!
        int number=0;
        synchronized void countpeople(){
        number++;
    }
    %>
    <%
        if (session.isNew()){
            countpeople();
            String num=String.valueOf(number);
            session.setAttribute("counter", num);
        }
    %>
    您是第<%=session.getAttribute("counter")%>位访问者!
</body>
</html>

------解决思路----------------------
session.isNew这个方法没有用过,不知道这个方法是不是这个意思。

不过你可以采用另一个种解决方式啊。首次访问的时候计算器加1,并且往session中写入一个值,然后每次就判断session中是否存在这个值,如果存在这个值,则不加,不存在则认为是首次访问。
------解决思路----------------------
(可选的:你可以下载一份 java 反编译工具。它可以让你看正在运行的代码的样子)
http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html

这里说如果让 tomcat 在编译 jsp 时保留一份由 JSP 编译生成的 Servlet 源码不要删除,你可以在 tomcat 的 work / tmp 之类的目录下去找 java 源码文件,应该有你自己的那个份,你可以看到 <%!  中的代码最后是什么样的 %>。

那你个把计数器放在 session 中的做法是有问题的,因为浏览器关闭时 session 就消失了,重新打开就是新的 session,又从1开始计算,期望的办法是把数值放在 application 里面。

  application.setAttribute("counter", number);

再说了,你已经有个 servlet 变量 number ,为什么还用 session 来存储它呢?直接用 number 不好么?
一般来说第几位访客正式的版本应该保存在持久性的存储中,比如文件中或数据库,这样服务器重启后也能接着计数。