一个关于jsp页面变名声明的问题

iamsoloist 2004-12-28 01:08:36
<%! String str="0"; %>

<%
for (int i=1; i < 10; i++)
{
str = str + i;
}
%>


<% String str="0"; %> (不带!)

<%
for (int i=1; i < 10; i++)
{
str = str + i;
}
%>
有什么区别吗?讲一讲原理好吗?谢谢

第一种是我反复刷新页面,str的值不清空,就象session一样呢

...全文
90 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcs560 2004-12-28
  • 打赏
  • 举报
回复
关注!
iamsoloist 2004-12-28
  • 打赏
  • 举报
回复
谢谢  littleboys 。
littleboys 2004-12-28
  • 打赏
  • 举报
回复
好久没有温习了,从以前文档中找到的。
littleboys 2004-12-28
  • 打赏
  • 举报
回复
在< .... >定义的变量是JSP的本地变量,它们对于外部函数是不可见的,即使这些函数和变量在同一页面中声明。如:

<
int evilVariable = "666";
>
...
function testFunction() {
//在函数内部,变量evilVariable是不可见的
}
为什么呢?这是因为变量evilVariable最终成为结果servlet中service()方法的一个本地变量,因此它不能被结果servlet的其它方法存取。

对于在<! >中声明的变量将作为全局变量。如:

<!
int evilVariable = "666";
>
...
function testFunction() {
int x = evilVariable; //能够使用变量evilVariable
}
这是因为通过这种方式定义的evilVariable变量变为了结果servlet的一个私有成员变量,因此它可以被servlet中的所有的方法存取。

结论

理解以上的概念是很重要的,因为在servlet环境中,对于一个JSP页只允许有一个结果servlet的实例在运行和响应所有的页面请求。因此,在结果servlet中所有的成员变量可以被所有的请求所共享,而service()方法中的本地变量只能每响应一次请求就重建一次。故我们将变量放置到<SERVER></SERVER>标签中时,应注意以上的规则。
iamsoloist 2004-12-28
  • 打赏
  • 举报
回复
难道我们运行index.jsp的时候不是重新实例一个index_jsp吗?
如果不是的话,那么
String str="0";

static String str="0";
就没有区别吗?

---------
冰与火: 谢谢你的回答,但我还是没有明白!

gks_cn 2004-12-28
  • 打赏
  • 举报
回复
页面里面生命类变量不好。
形印声传 2004-12-28
  • 打赏
  • 举报
回复
声明:就是有个初始化的过程,在页面诞生时期就已经存在了。我感觉它在页面中的位置有点象类成员变量的味道,但又不完全是。
scriplet:相当于运行时的概念,页面生成时执行一次java代码。
iamsoloist 2004-12-28
  • 打赏
  • 举报
回复
在work目录找到源代码一看 str 也不是static的,可为什么就不清0呢,怪啊。

-------------------------------------------
public class index_jsp extends HttpJspBase {

String str="0";

private static java.util.Vector _jspx_includes;

public java.util.List getIncludes() {
return _jspx_includes;
}
------------------------------------
ETUFO 2004-12-28
  • 打赏
  • 举报
回复
倒是一直没在意这个问题。小哥你可真仔细阿

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧