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

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.


  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值