100分请教一个问题:在JSP的服务器中,被声明为 static 的方法、变量生命周期的问题
各位大虾,在JSP的服务器中,被声明为 static 的方法、变量、(不管有多少个客户端访问)在服务器端是不是只有一个实例运行?还是服务器端为个客户端各生成一个实例运行?
小弟现在 也在学JSP,这个问题让各位大虾见笑了。恳望各位大虾指点指点。
------解决方案--------------------只有一个实例,java和jsp在这方面的行为是一样的
------解决方案--------------------tong shang
------解决方案--------------------不是,因为整个jsp环境下是一个session,所以最好使用application,response等特定指令
------解决方案--------------------只有一个
------解决方案--------------------static为类的所有实例共享
------解决方案--------------------顶一下,只有一个
单态不就是这个原理么
------解决方案--------------------简单来说只有一个;
复杂来说也有例外的,3言2语说不清楚,谨慎使用为好,能不用尽量不用;
例如采用分布集群服务器咯,服务器不止个ClassLoad什么的
------解决方案--------------------static 的属性和方法属于类对象(class)的东西。
所有的对象都共享一份类对象,所以当然只有一个。
至于你说的在客户端还是服务器端主要看你拥有static的程序在那里运行,
如果是服务器端 当然是在服务器。如果是applet在客户端运行的就肯定是进驻客户端的jvm里了
PS: coding中尽量少用static 一是会破坏程序的封装性 二是可能会造成线程冲突。
------解决方案--------------------同意 chnic(挠痒痒) ( )
------解决方案--------------------同意chinc的看法.主要还是看楼主的static用在什么地方了.
------解决方案--------------------小弟是想用被声明为static的方法来统计访问流量
------解决方案--------------------用不着静态变量吧,声明一个成员级的变量就可以。
<%! int i=0; %>
<% i++; %>
不过,webapp重启之后,会重新置成0
------解决方案--------------------to 楼上
jsp里强烈不建议使用 <%! int i=0; %>
你这样会有线程的冲突问题的。
如果并发5W个人访问这个页面 你觉得这个i 会是50000么?
------解决方案--------------------各位大哥,我是要用数据库作访问量统计的呀,怎么能用
<%! int i=0; %>
<% i++; %>
之类的呢?
我将对数据库的操作封装了static类型的方法。