大家帮忙看看这两段代码有啥区别?

h123hu 2010-01-31 06:27:54
为什么在页面的显示中他们的效果完全一样?
但是,代码却相差这么大?


<%! int a=1; %>
<% out.print("a的显示次数为"+a++); %>



<%
int b=0;
if(application.getAttribute("pnum")!=null)
{
b=((Integer)application.getAttribute("pnum")).intValue()+1;
application.removeAttribute("pnum");
application.setAttribute("pnum",b);
}
if(b==0)
{
b=1;
application.setAttribute("pnum",b);
}
%>
<%
out.print("b的显示次数为"+b); %>
...全文
188 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujun_1028 2010-02-01
  • 打赏
  • 举报
回复
雷人啊
绝对零度9527 2010-02-01
  • 打赏
  • 举报
回复
一个是直接输出a++的值,一个是把值先放入application中,取出做个判断再输出,当然一样了
passself 2010-02-01
  • 打赏
  • 举报
回复
顶楼上的,在jsp中要把所有的参数加上初始值
xuetao121 2010-02-01
  • 打赏
  • 举报
回复
application对象。在JSP服务器运行时刻,仅有一个Application对象,它由服务器创建,也由服务器自动清除, 不能被用户创建和清除。我们只能创建这个Appliation对象的同步拷贝。
第二种当中,他对于b的值判断。如果是第一次打开这个页面呢。走
if(b==0)
{
b=1;
application.setAttribute("pnum",b);
}
这个部分。同时把b存起来。
再刷新页面,就走第一个方法了。这时候把存起来的b取到,直接+1.
这种方法有情况的判断,相对更合理,但是更占资源。
绿光 2010-02-01
  • 打赏
  • 举报
回复
令人震撼的问题呀
itliyi 2010-02-01
  • 打赏
  • 举报
回复
application判断 如果不为空直接取值+1 然后移除参数 赋值 加 1 后的新值
为空则设置一个初始值 1
jsp 9大对象
gulijun1985 2010-02-01
  • 打赏
  • 举报
回复
...1+1=2;
1+5-3+6-7=2;
结果也一样呢
xuetao121 2010-02-01
  • 打赏
  • 举报
回复
呵呵加油吧。都是这么过来的。
其实这个问题很有意思的
h123hu 2010-02-01
  • 打赏
  • 举报
回复
呵呵,感谢cntmi,itliyi,xuetao121,lhliaiuiang,halfmood,AWUSOFT
这几位大哥的耐心回答,正有了你们这些热心人,我们这些菜鸟才会进步

另外,对那些自以为是的前辈们说句话:难道你们在刚接触WEB的时候,难道一个问题都没有?
难道全部都是一接触就全懂了,全明白了?
dumbant 2010-02-01
  • 打赏
  • 举报
回复
LZ这问题很强大!!!估计从来没有接触过WEB这方面的程序.
awusoft 2010-02-01
  • 打赏
  • 举报
回复
两个代码的区别在于,一个是因为JSP只有一个对象,而计数器刚好放在了成员变量里,多个浏览器来访问,都是同一个JSP对象.


另一个则是因为一个WEB应用程序都有一个application对象,在一个WEB项目中,有很多的JSP,在所有的JSP中,这个application都是一样的.针对一个JSP来说,那就肯定是一样的了,不管多少个浏览器来访问.
awusoft 2010-02-01
  • 打赏
  • 举报
回复
可以使用System.out.println(this);来测试,看看多个浏览器访问的结果是不是一样的
awusoft 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 halfmood 的回复:]
第一个代码在关闭浏览器后就重新开始计数了
第二个代码只要web服务器不关闭就能不停的计数。
[/Quote]


第一个代码在关闭浏览器后就重新开始计数了

这是错误的说法....一般情况下,一个JSP只会有一个对象来为请求服务的,而
<%! int i=0;
%>
相当于这个i变成成员变量,因为多了一个!

而一个JSP只有一个对象,所以多个浏览器访问时,都是同一个对象在服务,而多个人访问之后的都会累加起来.

halfmood 2010-02-01
  • 打赏
  • 举报
回复
第一个代码在关闭浏览器后就重新开始计数了
第二个代码只要web服务器不关闭就能不停的计数。
cntmi 2010-01-31
  • 打赏
  • 举报
回复
这是jsp,你要问为什么显示的一样,我真的不知道怎么去回答这个问题
只能说,第二个程序,比第一个程序多了一些判断和处理,只是这些判断和处理在你的一次显示中没有影响到b的值

如果pnum的值不为0或null,结果就不一样了


其实如果你不理解,那我真的说你还没学过jsp吧?
h123hu 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaofanku 的回复:]
你的问题太有意思了,


[/Quote]
小弟是新手撒,问的问题有意思很正常
街头小贩 2010-01-31
  • 打赏
  • 举报
回复
你的问题太有意思了,

81,094

社区成员

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

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