为什么在页面的显示中他们的效果完全一样?
但是,代码却相差这么大?
<%! 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); %>

解决方案 »

  1.   

    这是jsp,你要问为什么显示的一样,我真的不知道怎么去回答这个问题
    只能说,第二个程序,比第一个程序多了一些判断和处理,只是这些判断和处理在你的一次显示中没有影响到b的值如果pnum的值不为0或null,结果就不一样了
    其实如果你不理解,那我真的说你还没学过jsp吧?
      

  2.   

    application判断 如果不为空直接取值+1 然后移除参数 赋值 加 1 后的新值
    为空则设置一个初始值 1 
    jsp 9大对象
      

  3.   

    application对象。在JSP服务器运行时刻,仅有一个Application对象,它由服务器创建,也由服务器自动清除, 不能被用户创建和清除。我们只能创建这个Appliation对象的同步拷贝。
    第二种当中,他对于b的值判断。如果是第一次打开这个页面呢。走
    if(b==0)
    {
    b=1;
    application.setAttribute("pnum",b);
    }
    这个部分。同时把b存起来。
    再刷新页面,就走第一个方法了。这时候把存起来的b取到,直接+1.
    这种方法有情况的判断,相对更合理,但是更占资源。
      

  4.   

    顶楼上的,在jsp中要把所有的参数加上初始值
      

  5.   

    一个是直接输出a++的值,一个是把值先放入application中,取出做个判断再输出,当然一样了
      

  6.   

    第一个代码在关闭浏览器后就重新开始计数了
    第二个代码只要web服务器不关闭就能不停的计数。
      

  7.   

    第一个代码在关闭浏览器后就重新开始计数了这是错误的说法....一般情况下,一个JSP只会有一个对象来为请求服务的,而
    <%! int i=0;
    %>
    相当于这个i变成成员变量,因为多了一个!而一个JSP只有一个对象,所以多个浏览器访问时,都是同一个对象在服务,而多个人访问之后的都会累加起来.
      

  8.   

    可以使用System.out.println(this);来测试,看看多个浏览器访问的结果是不是一样的
      

  9.   

    两个代码的区别在于,一个是因为JSP只有一个对象,而计数器刚好放在了成员变量里,多个浏览器来访问,都是同一个JSP对象.
    另一个则是因为一个WEB应用程序都有一个application对象,在一个WEB项目中,有很多的JSP,在所有的JSP中,这个application都是一样的.针对一个JSP来说,那就肯定是一样的了,不管多少个浏览器来访问.
      

  10.   

    LZ这问题很强大!!!估计从来没有接触过WEB这方面的程序.
      

  11.   

    呵呵,感谢cntmi,itliyi,xuetao121,lhliaiuiang,halfmood,AWUSOFT
    这几位大哥的耐心回答,正有了你们这些热心人,我们这些菜鸟才会进步另外,对那些自以为是的前辈们说句话:难道你们在刚接触WEB的时候,难道一个问题都没有?
    难道全部都是一接触就全懂了,全明白了?