当浏览器第二次访问以下jsp网页时的输出结果是  a=2 b=1<%!int a = 0;%>
<%
int b = 0;
a++;
b++;
%>
a:<%=a%><br>
b:<%=b%> 

解决方案 »

  1.   

    <%!    %> 声明语句 <%! Date myD = new Date(); %>
    <%     %> 代码语句 <% for(int i=0;i<10;i++) %>
    <%@    %> 指令语句 <%@ page import="java.util.*" %>
      

  2.   

    <%!int a = 0;%> //声明的变量a在是成员变量,在此处生命的方法或变量不属于service()方法体
    <%int b =0 %>//此处声明的变量在service方法中//具体区别可以写一个测试的jsp,运行tomcat,到work子目录下查看对应生成的java文件就知道了
      

  3.   

    <%!%>
    这是一个整体符号,表示里面的内容是声名语句
      

  4.   

    jsp请求会被翻译成servlet,编后执行,比如tomcat可以在work文件下找到翻译后的源码
    一个servlet在服务器中只有一个对应实例
    而servlet的service方法(doGet,doPost)是线程安全的,应用服务器给每一个客户端(线程)分配不同的内存区域(你可以理解为service方法里的局部变量)实现请求处理,而jsp中<%!int a = 0;%>
    相当于是在servlet里声明了实例变量,每个客户端都会访问这个变量,所以你每次访问的都是同一个a,它是线程不安全的。