有!<%!String str ;%>在整个页面都有效<%String str ;%>则不是

解决方案 »

  1.   

    没有区别,都是声明变量。
    <%String str ;%>整个页面也是有效的  。
      

  2.   

    看了JSP编译后的SERVLET你就明白了,
    <%!String str ;%>是类变量,<% String str; %>则不一定
      

  3.   

    <%! String str;%>这种称之为JSP声明在JSP声明块中声明的变量在所有运行这个JSP程序代码的线程中有效。从某种意义上说,在JSP声明中声明的JSP变量相当于全局变量,而在JSP代码段中被声明的JSP变量则相当于局部变量...
      

  4.   

    <%! String str;%>这种称之为JSP声明在JSP声明块中声明的变量在所有运行这个JSP程序代码的线程中有效。从某种意义上说,在JSP声明中声明的JSP变量相当于全局变量,而在JSP代码段中被声明的JSP变量则相当于局部变量...
      

  5.   

    我们编写好一个JSP程序,将它放在JSP服务器的发布目录,并在浏览器调用该JSP程序,当JSP服务器接到这个请求,它就会自动检查在服务器的内存/缓冲区中有没有这个JSP程序的实例教程,如果有,就产生一个新的实例教程,向客户端输出反馈信息;如果没有,服务器判断这是一个没有被编译过的JSP程序,那么它就会调用可解释执行的class文件,JSP引擎会载入这个class文件,解释执行它,并把结果返回给客户端的浏览器。如果JSP声明块中声明了某个java变量,那么它就在第一次编译时被创建和初始化,同时也是最后一次,除非该JSP文件被修改过重新载入了。从此以后,这个JSP程序的二进制代码就一直存在于JSP引擎的内存空间中,当该JSP程序被客户端再次请求时,JSP引擎只是简单地创建一个新的线程,执行这些二进制代码,但是JSP声明块中的变量却没有被重新创建和初始化,,新的线程将会直接使用原来就已经存在的JSP变量的一个拷贝。当然拷贝中JSP变量值的变化也会影响到该变量原来的值。如果JSP变量是在JSP程序段中被声明的,那么每当新的请求线程产生,它都需要重新创建和初始化。--《JSP深入编程 page132》--敲得很幸苦,上面的没有验证,我几乎不用JSP声明来定义变量的
      

  6.   

    weidegong(weidegong)  说的对
      

  7.   

    <%!String str ;%>定义的是全局变量,
    <%String str ;%>定义的是非全局变量。