JSP方法变量与类变量

问题引入:

JSP文件中这两种变量声明有什么区别?

<%!int count;%>
<% int count2;%>

在JSP中<%! %>为JSP声明,可以声明变量和方法,与<% %>程序片不同的是,前者声明的变量或方法会成为该JSP编译后的Servlet类的成员变量或方法。

下面我们来证实:

在count.jsp中分别使用两种方法声明变量
这里写图片描述

知识点: JSP页面在第一次访问时会被servlet容器编译为Servlet类。

使用浏览器访问count.jsp后在下面目录中可以看到生成对应的java文件和编译后的.class文件(Tomcat编译JSP文件后生成的类文件会在work目录里)

这里写图片描述

打开.java后可以看到变量count和方法print()为类成员。

这里写图片描述

而在_jspService()方法里count2被定义为方法变量

这里写图片描述

知识点:
1.servlet的运行模式为单实例多线程,也就是在web项目运行过程中每个servlet类只有一个实例,而每次访问JSP页面Tomcat都会创建线程调用编译后servlet类实例的service方法。

所以:
<% %>里定义的变量为方法变量
<%! %>里定义的变量为类变量

测试例子:

JSP文件:

这里写图片描述

使用浏览器打开,每次刷新(创建线程调用servlet的service()方法)成员变量count都会+1,即使使用不同浏览器也会在原本的值上+1,而方法变量count2一直是0;(细心的朋友会发现“count2 = 0;”,原因是直接使用没有初始化的方法变量的话java编译器会报The local variable count2 may not have been initialized错误)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值