<%@ page contentType="text/html;charset=GB2312" %> 
<%!  
     int m=100; 
%> 
原值:<%=m%> 
<br> 
<% 
      m=200; 
%> 
现值:<%=m%> 
该网页的执行结果不断刷新结果一直是: 
原值:100 
现值:200 
或者打开其他新的标签页结果仍然是: 
原值:100 
现值:200 
 
按照!的用法结果不应该是如下结果吗? 
原值:200 
现值:200 求教可能是哪方面的问题? 

解决方案 »

  1.   

    你可以打开jsp文件产生的servlet看下代码。程序是和普通的java文件一模一样顺序执行的。
      

  2.   

    谢谢!您认为结果应该是什么?你把jsp那部分去掉
    就等价于
    int m = 100;
    print(m);
    m = 200;
    print(m);
      

  3.   

    jsp写的代码,经过Tomcat或别的什么容器编译后,最终是以_youjspname_jsp.java形式出现的,代码基本样式如下:
    public final class _youjspname_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent { int n = 0;
      private static java.util.Vector _jspx_dependants;  public java.util.List getDependants() {
        return _jspx_dependants;
      }  public void _jspService(HttpServletRequest request, HttpServletResponse response)
            throws java.io.IOException, ServletException {
        int m = 0;
        ...
      }
    }
    其中_jspService()是jsp的主体~~在上面的代码中,有两个变量,全局变量n和局部变量m,其中n就是用<%!int n = 0;%>定义的,m是用<%int m = 0;%>定义的,如果你在<%!%>里面定义一个方法,那么这个方法将是class _youjspname_jsp的一个方法;<%%>是不允许定义方法的,原因很明显:方法里面不允许定义方法!
      

  4.   

    谢谢!您认为结果应该是什么?你把jsp那部分去掉
    就等价于
    int m = 100;
    print(m);
    m = 200;
    print(m);<%!  
         int m=100; 
    %> 
    上面有个符号!(感叹号),m不应该是全局变量吗?
      

  5.   

    class a () {
      int m = 100;
      public void prnt() {
        print(m);
        m = 200
        print(m);
      }
    }
      

  6.   

    请解释一下
    <%@ page contentType="text/html;charset=GB2312" %> 
    <%!  
         int m=100; 
    %> 
    原值:<%=m%> 
    <br> 
    <% 
          m=200; 
    %> 
    现值:<%=m%> 的执行原理。其中的符号!是什么意思?
    执行结果是怎样的,不断刷新后!
      

  7.   

    谢谢!您认为结果应该是什么?你把jsp那部分去掉
    就等价于
    int m = 100;
    print(m);
    m = 200;
    print(m);<%!  
         int m=100; 
    %> 
    上面有个符号!(感叹号),m不应该是全局变量吗?
    全局变量不是这个意思。另外,全局变量这个说法。不准确。还是去看下产生的servlet源码吧。你每次刷新。都会从服务器重新加载一个servlet对象。m又重新初始化为100了。原始的值没有了。
      

  8.   

    请解释一下
    <%@ page contentType="text/html;charset=GB2312" %> 
    <%!  
         int m=100; 
    %> 
    原值:<%=m%> 
    <br> 
    <% 
          m=200; 
    %> 
    现值:<%=m%> 的执行原理。其中的符号!是什么意思?
    执行结果是怎样的,不断刷新后!<%!%>在jsp中是声明标签,就是你声明一个变量
      

  9.   

    当JSP转为Servlet时<%!%>会被声明为成员变量
      

  10.   

    请解释一下
    <%@ page contentType="text/html;charset=GB2312" %> 
    <%!  
         int m=100; 
    %> 
    原值:<%=m%> 
    <br> 
    <% 
          m=200; 
    %> 
    现值:<%=m%> 的执行原理。其中的符号!是什么意思?
    执行结果是怎样的,不断刷新后!
    你每次刷新页面相当于调用a.prnt() 
    你说第一个m应该打多少
      

  11.   

    请解释一下
    <%@ page contentType="text/html;charset=GB2312" %> 
    <%!  
         int m=100; 
    %> 
    原值:<%=m%> 
    <br> 
    <% 
          m=200; 
    %> 
    现值:<%=m%> 的执行原理。其中的符号!是什么意思?
    执行结果是怎样的,不断刷新后!
    你每次刷新页面相当于调用a.prnt() 
    你说第一个m应该打多少执行完后对象还在吗?
      

  12.   

    谢谢!您认为结果应该是什么?你把jsp那部分去掉
    就等价于
    int m = 100;
    print(m);
    m = 200;
    print(m);
      在”<%!”和”%>”标记之间声明的变量在整个JSP页面内都有效,这些变量的内存空间直到服务器关闭后才释放。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,这些线程由JSP引擎服务器来管理,这些线程共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。
      

  13.   

    请解释一下
    <%@ page contentType="text/html;charset=GB2312" %> 
    <%!  
         int m=100; 
    %> 
    原值:<%=m%> 
    <br> 
    <% 
          m=200; 
    %> 
    现值:<%=m%> 的执行原理。其中的符号!是什么意思?
    执行结果是怎样的,不断刷新后!
    你每次刷新页面相当于调用a.prnt() 
    你说第一个m应该打多少其他人调用这个网页会是什么结果?  在”<%!”和”%>”标记之间声明的变量在整个JSP页面内都有效,这些变量的内存空间直到服务器关闭后才释放。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,这些线程由JSP引擎服务器来管理,这些线程共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。