ResultSet r = s.executeQuery(sSql);s是在外部变量。可是在函数中不能访问。
<%! %> 和<%%>有什么区别呢?

解决方案 »

  1.   

    声明变量用<%!%>和<%%>都可以。
    但声明函数必须用<%!%><%!%>声明的为类的实例变量,下次当你请求这个JSP文件时,
         这个变量中的值还会存在<%%>声明的为方法中的变量,下次当你请求这个JSP文件时,
         这个变量中的值会重新初始化为原定的值
      

  2.   

    <%@  page  contentType="text/html;  charset=GB2312"  %>  
    <%@  page  import="java.sql.*"  %>  
    <%  
       String  dbUrl  =  "jdbc:oracle:thin:@localhost:1521:ora8i";  
       String  user  =  "SYS";  
       String  password  =  "change_on_install";  
       Class.forName("oracle.jdbc.driver.OracleDriver");  
       Connection  c  =  DriverManager.getConnection(dbUrl,user,password);  
       Statement  s=  c.createStatement();  
    %>  
    <html>  
    <head>  
    <title>  
    hello  
    </title>  
    </head>  
    <body>  
    <h1>树的显示</h1>  
    <%!  
    String  dispTree(int  nFid,Statement s)  
    {  
       String  sHtml="";  
       String  sSql="";  
       if(nFid==0)  
       {  
           sSql="SELECT  *  FROM  AKANE.AK_COLUMN  WHERE  FID  is  null";  
       }  
       else  
       {  
           sSql="SELECT  *  FROM  AKANE.AK_COLUMN  WHERE  FID  ="+nFid;  
       }  
       sHtml=sSql;  
       ResultSet  r = null;
       try{  
            r  =  s.executeQuery(sSql);  
            while  (r.next())  
            {  
                sHtml+="<li>"+r.getString("FID")+"__"+r.getString("NAME")+"__"+r.getString("ID")+"</li>";  
            }  
            return  sHtml;  
       }  
       catch(SQLException  e){  
           System.out.println(e.getMessage());  
       return null;
       }  }  
    %>  
    <%=dispTree(0,s)%>  
    </body>  
    </html>
      

  3.   

    JSP最后编译成Servlet
    有什么区别到tomcat的work目录下看看编译出的java文件就知道了比如test$jsp.java