日期:2014-05-18  浏览次数:20833 次

初学JSP 绝对基础的问题
<%@   page   contentType= "text/html;   charset=GBK "   %>


<html>
<head>
<title> jshell   ver   0.1 </title>
</head>
<body>
<%!
int   i=0;
%>

<%
out.println(i++);
%>

</body>
</html>

上面这些代码   我用ie浏览
一直手动刷新   每刷一次   i的值就会加1
可是     我这里出现了一个问题
有的时候   我刷着刷着   i   的值突然就变成了0!   这是为啥!?

------解决方案--------------------
我觉得可能是由于SERVLET的多线程的安全问题造成的,因为使用 <%! %> 声明的变量是Servlet的实例变量,不是线程安全的,比 <%!int i=0;%> 如果你改成 <% int i=0;%> 则是线程安全的,这样你的问题也许就解决了。
线程安全问题主要是由实例变量造成的,不管在Servlet还是JSP,或者在Struts的Action里面,不要使用实例变量,任何方法里面都不要出现实例变量,你的程序就是线程安全的,就不会出现类似你说的这些问题,你可以试试看。