jsp页面编译后的servlet是否常驻内存?

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:29:15
一个简单的统计访问人数的jsp

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

<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>

<BODY>
<%! int i = 0;%>

<%i++;%>

您是第<%=i%>位访问本网站的人.
</BODY>

</HTML>

变量i一开始声明是为0,每次一个客户访问后就增加了1。

那么是不是i就一直长驻内存?若不是一执行i就又成为0了。

若是长驻内存,一个大型网站那么多页面,那服务器能受得了吗?

你定义的i前面有个叹号,那个意思是这个变量是类范围的,你可以理解成一个静态变量。只要你的页面不修改而导致重新编译。这个变量是常驻内存的。

1、使用这种方式本身就不是很保险的方式 ,如果服务器重新启动,这个计数会丢失的。
2、关于压力问题,在这里不算什么,对服务器没有什么影响。
3、如果真是大型网站,最好不要用这样的方法,可以采用第三方的计数,或者保存在数据库里。

不想详细解释,建议LZ看看 servlet的生命周期以及jsp与servlet之间的关系

是,如果jsp被修改了,jsp引擎会翻译编译新jsp,然后卸载前那个,重加载这个