在JSP页面代码中,应该在<%%>中定义变量,可是我看到有些变量或方法是在<%!%>中定义的,为什么要加“!”?二者有什么区别吗?

解决方案 »

  1.   

    <%%>这个是脚本
    <%!%>这个是申明
    变量肯定需要申明
    所以要写在<%!%>里面
      

  2.   

    可是<%%>里定义变量也是正常的啊,比如在<%%>里定义变量接受前一个页面传递过来的参数
      

  3.   

    <%
    String s = "test";
    out.println(s);
    %>
    ==>
    ...
    public class test_jsp ...{
      ...
      public void service(HttpServletRequest req,HttpServletResponse res){
        ...
        String s = "test";
        out.println(s);
        ...
      }
      ...
    }
    ===================================================================
    <%!
    String s = "test";
    %>
    <%
    out.println(s);
    %>
    ==>
    ...
    public class test_jsp ...{
      ...
      String s = "test"; 
      public void service(HttpServletRequest req,HttpServletResponse res){
        ...
        out.println(s);
        ...
      }
      ...
    }
      

  4.   

    dreamover(梦醒了) ,你的意思是单独定义变量的时候用
    <%!String s = "test";%>,如果后面有其他的代码就得用
    <%
    String s = "test";
    out.println(s);
    %>
    是吗?
      

  5.   

    <%!%>还可以声明方法,原理同上<%!
      private boolean isDate(String str){
        return str.matches("\\d{4}-\\d{2}-\\d{2}");
      }
    %><%
      String d = "2006-05-aa";
      if(isDate(d)){
        out.println("var 'd' is a right date");
      }else{
        out.println("var 'd' is a wrong date");
      }
    %>
      

  6.   

    dreamover(梦醒了) ,你的意思是单独定义变量的时候用
    <%!String s = "test";%>,如果后面有其他的代码就得用
    <%
    String s = "test";
    out.println(s);
    %>
    是吗?
    ==================================================不是,再想!
      

  7.   

    两都的作用域不用,<%!%>声明的是类变量或类方法,<%%>声明的是局部变量,是JSP编译成sevlet后service方法中的变量。
      

  8.   

    dreamover(梦醒了) ,是不是在<%!%>里声明方法可以供页面内的其他代码调用?
      

  9.   

    <%!%>中声明的是变量或方法在编译后变成你那个jsp页面生成的servlet的类的成员变量和方法!
    <% %>中声明的是变量或方法在编译后变成你那个jsp页面生成的servlet的类的service方法的局部变量和方法!
      

  10.   

    你非常同意jianghao08(自由自在) 的说法,就是这样的哈!