JSP中 <%! %> <% %> 2者之间声明的变量有什么不同?
在之间放置声明变量是页面的成员变量。声明的变量在整个JSP页面都有效
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <body> <%!int i = 0;%> <% i++; %> <% int j = 0;j++;%> <p>带!:您是第<%=i%>个访问本站的用户。</p> 每次刷新加1,而且不同浏览器访问共享 <p>不带!:您是第<%=j%>个访问本站的用户。</p>一直不变为 1 </body> </html>
jsp引擎将jsp页面转译成java文件时,将标记符之间声明的变量作为类的成员变量,这些变量占有的空间直到jsp引擎关闭才释放。(存在服务器中)
在之间声明的变量属于java程序片的局部变量,只在当前及后继的java程序片中有效。而且这些变量不是线程间共享的,各个客户之间是互不影响的。浏览器每请求一次页面,tomcat服务器就视为一个有一个新的用户,并为之建立一个线程来执行jsp转译、编译后的字节码。