您的位置:首页 > Web前端 > JavaScript

jsp 页面刷新 全局变量 每次都递增 局部变量 不能 的原因

2016-12-21 16:35 357 查看
jsp 本质上是一个servlet 类 ,<%!  %>声明的是这个类的成员变量, <% %>中声明的变量是service()方法中的局部变量;成员变量会被多个对象共享,局部变量单独对象访问,所以 定义在<%!  %>中的全局变量能递增

例子:

JSP 计数器

<%@ page contentType="text/html;charset=gb2312"%>

<html>

<body>

<%!int counter=0;

synchronized void counterFunction()

{

counter++;

}

%>

<%counterFunction();%>

网站计数器<br>

您是第<%=counter%>位访问者

</body>

</html>

1. Jsp会变转换为一个Servlet,<%! %>是声明语句,里面的声明直接写在Servlet类中,这不是全局变量,而是属性,属性!

2. <% counterFunction();%>,这是Scriplet,被写在了service()方法里!service()是Servlet的一个最重要的方法,客户请求Servlet时,容器只是创建一个线程,调用这个方法。

3. Servlet在服务器中一经初始化,就一直存在,知道服务器关闭。所以整个过程应该是这样:1. 写好Jsp页面2. 启动服务器,第一次请求Jsp页面的时候,服务器就生产Java类,然后编译,在初始化,最后返回请求。也就第一次会这样,后面请求时,容器直接返回存在的Servlet,因为已经存在了。

4. 在IE中输入http://localhost:8080/....jsp 后,容器创建一个线程,调用service方法,因为方法中有我们写的 counterFunction(),所以就能完成统计任务了,每请求一次,加1.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: