在jsp中可以用<%!  %>申明变量,但是为什么不能在其中使用request、out等内置对象呢,例如我滴代码:
<%!
     String name=request.getParameter("userName");
     String password=request.getParameter("userPwd");
    
%>
提示:request cannot be resolved<% %>和<%! %>有什么区别?

解决方案 »

  1.   

    <%! %>是用来声明变量和方法的,你把Java语句写在里边会报错的,Java语句应该写在<%  %>里。<%!  %>
    里的内容也可以写在<%  %>里。
      

  2.   

    需要主动传进去,这样就可以了
    <%!
    private void test(HttpServletRequest request, HttpServletResponse response)
    {
    }
    %>
    <%
        test(request, response);
    %>
      

  3.   

    建议楼主看一下jsp编译后生成的servlet就知道了。
      

  4.   

    用<%! %>申明的是类里面的属性,或方法,用<% %>申明的是:类方法_jspService中的局部变量。
      

  5.   

    1楼正解,<%! %>是用来声明变量和方法的,为了让程序员写的代码读起来更容易
      

  6.   

    学习JSP最好的办法是看它生成SERVLET之后的原码。
    不知道你是否看过。
    如果是tomcat服务器,源码在work目录底下一直进去直到看到你的工程名。(发布是发布在webapps底下)
    你去看下,<%%>里面的东西。服务器将它变成java代码放在_jspService这个方法里面。
    <%!%>这里面的代码,是放在class ***{这里面的},类似于我们定义类的属性。
    所以。当然,你能够像下面这样子用吗?
    class a{
       request.getparameter().......
    }
    当然不行。
    另外还有就是import语句。。
    当然就是像JAVA里面放在类外面的import一样了。放的位置不同,功能也是不一样的。。够明白了吧
      

  7.   

    <%!
     xxx
    %>会被编译为servlet里面的 成员, 试想写个servlet的方法。
      

  8.   

    <%!%>里面写的方法和变量都会作为静态的方法和变量,会消耗服务器资源,同时也有可能引发多个变量同名的问题,记得好像是这样的因此基本所有的代码都需要写到
    <%%>
    里面同事,在页面写方法是一种非常愚蠢的行为。完全忽略了JAVA的代码重用的意义
      

  9.   


    其实,<%! %>里的代码,就好比是在类里的代码,但却是在类的方法之外(也就是通常我们在类里申明的全局变量的地方)。而<% %>就相当是我们的main()方法底下的代码,当然是可以直接执行的。而jsp页面就好比是一个类,毕竟最终还是要转化为servlet类,当然这不是我们所关心的(Tomcat从事的工作)
      

  10.   

    <%! %>里面的变量,多线程访问会出问题。