大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
JSP两种声明变量的区别
在JSP中用两种声明变量的方法,一种是在<%! %>内,一种是在<% %>内。他们之间有什么区别呢?我们直接看一个JSP文件来理解。
代码如下:
<HTML>
<TITLE>JSP Declarations</TITLE>
<BODY>
<H1>JSP Declarations</H1>
<%!
int count = 0; //声明在<%!>内的变量
void method(){}
%>
<%
int i= 0; //声明在<% >内的变量
%>
<H1>
count:<%= ++count %></H1>
<br/>
<H1>i:<%= ++i %></H1>
</BODY>
</HTML>
启动tomcat运行这个jsp会发现当我们不断刷新页面时count的值会不断增加 而i的值始终不变,也就是说定义在<%!%>内的变量会累加,而定义在<%%>内的变量不会累加。
这是为什么呢?
声明在<%! %>内的变量和方法是一个类内的变量和方法也就是成员变量和成员方法。声明在<%%>内的变量是一个方法的变量也就是局部变量。
我们学习JAVA的时候就知道成员变量会被多个对象共享,而局部变量单独对象访问。所以count会自动增加,i不对递增。
在这里还有个问题要告诉读者,如果在<% %>内添加一个method()方法那么该程序就会报错,其实原因不难想象,这样声明一个方法等于就是一个类里的方法里又声明了个方法。结果肯定是错误的。
注:jsp页面中<%! %>内定义的是全局变量。使用<%! %>定义的变量编译成servlet后成为servlet的私有成员变量,在servlet环境中,对于一个JSP页只允许有一个结果servlet的实例在运行和响应所有的页面请求。因此,在结果servlet中所有的成员变量可以被所有的请求所共享,所以只要成员变量没有重新赋值,下次访问该页面时仍然不变。而在<% %>中定义的变量编译成servlet后成为service()方法的一个本地变量,而service()方法中的本地变量只能每响应一次请求就重建一次。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180144.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...