<% is script segment
<%! is declaration

解决方案 »

  1.   

    <%  代码 %>
    <%!声明 %>
      

  2.   

    <%! 主要是用来声明变量的 在C中主要应用,在JSP中不用也可以
    《% 是原代码,
      

  3.   

    你放的路径是对的,不过如果你使用的是tomcat服务器,最好是把*.java也放在web/WEB-INF/classes/下面,而且写bean的时候要打包<%与<%!当然有区别了
    我记得在<% %>里声明的变量相当于全局变量
    在<%! %>里声明的变量相当于局部变量
    进一步怎么说我忘记了
    你可以多看一下以前的贴子
    《JSP程序设计》耿祥义编的这本书上好像有说明
      

  4.   

    <% %>中的是代码段,<%! %>用来声明函数或变量。
      

  5.   

    变量声明好像不要!也可以吧

    <% 
    String str;
    int i;
    %>
      

  6.   

    <%! %>里面是 变量、方法和类的声明区,在里面声明的变量、方法、类都会被保留成为一的一份,直到此jsp停止执行为止;也就是所有的请求服务都是共用这一份,信息同时被分享。
    <% %>可放入任何标准的java程序代码。
      

  7.   

    区别很大:

    <%!
    %>
    中定义的变量是类似于成员属性的
    而在
    <%
    %>
    中定义的变量类似于临时变量这个一定要注意,没弄好的话容易出问题
      

  8.   

    在tomcat编译后生成的.java里放的位置是不同的,
    给你看看下面的代码就知了:
    <BODY>
    <%! String fruits; %>
    <% String fruit; %>
    </BODY>
    public class test_jsp extends HttpJspBase {
     String fruits; //<%! %>放在这儿 public void _jspService(HttpServletRequest request, HttpServletResponse response)
            throws java.io.IOException, ServletException {
      ........
    out.write("<BODY>\r\n");
          out.write("\r\n");
     String fruit;  //<% %>放在了 _jspService()这个方法中,当然有区别了 
          out.write("\r\n");
     }
    }
    当然,你可以在<%! %>中定义方法了:
    下面改一下页面:
    <BODY>
    <%! String fruits; 
        private int i;  //定义了一个新的int 
    %>
    <%= i%>
    <%! public void method()  //声明了一个方法
    {  
    i = 1;
    }%>
    <% String fruit;
       method();  //调用方法
    %>
    <%= i%>
    </BODY>
    发现这次页面上会print   
    0  1再看一下编译生成的.java文件:
    public class test_jsp extends HttpJspBase { String fruits; 
        private int i;  public void method()  \\声明了方法
    {  
    i = 1;
    }
    public void _jspService(HttpServletRequest request, HttpServletResponse response)
            throws java.io.IOException, ServletException {
    ....
     out.write("<BODY>\r\n");
          out.write("\r\n");
          out.print( i);
          out.write("\r\n");
          out.write("\r\n");
     String fruit;
       method();
          out.write("\r\n");
          out.print( i);
    .....}
    }
    现在你明白了吧
      

  9.   

    就像这段,没有!就会出错了。
    <%!
    public String getStr(String str){
    try{
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("ISO8859-1");
    String temp=new String(temp_t);
    return temp;
    }
    catch(Exception e){
    e.printStackTrace();
    }
    return "null";
    }
      

  10.   

    <% %>
    是编写_jspService方法部分
    <%! %>
    是编写_jspService方法以外的部分
      

  11.   

    <%! %>中的变量是静态的。而<% %>中的变量是局部变量。
      

  12.   

    谢谢大家。还有就是useBean文件我放在了web/web-inf/classes/conn.class里面了,
    把conn.java也放进去了,可以调用时找不到包啊!~(虚拟目录为web,用的是tomcat5.0.14,jdk1.4)
    调用<jsp:useBean id="workM" scope="page" class="webconn.conn"/>
    conn.java源代码:
    package webconn;
    import java.sql.*;
    public class conn{
    Connection sqlConn=null;
    ResultSet rs=null;
    public conn(){
    try{
    Class.forName("org.gjt.mm.mysql.Driver");
    }
    catch(java.lang.ClassNotFoundException e){
    System.err.println("conn():"+e.getMessage());
    }
    }
    public ResultSet executeQuery(String sql){
    rs=null;
    try{
    sqlConn=DriverManager.getConnection("jdbc:mysql://localhost/bluecndb","admin","1346237");
    Statement sqlStmt=sqlConn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
    rs=sqlStmt.executeQuery(sql);
    }
    catch(SQLException ex){
    System.err.println("conn.executeQuery:"+ex.getMessage());
    }
    return rs;
    }
    }
      

  13.   

    <%!%>全局变量.可以用于声明class,全局变量,方法。
    不管这个<%!%>在jsp中那个地方,她的作用域都是整个页面
    <%%>只是代码段,不能用来声明class,和方法!