实验内容如下:--------------------------------------------------------------------
<jsp:useBean id="conn" scope="application" class="db.ConnSQL"/>----------------------------------------------------------------------
package db;
import java.sql.*;
public class ConnSQL{
String serverName = "localhost";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ghyghost"; 
String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String sConnStr = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ghyghost";
String user="sa"; 
String password="";  Connection connect = null;
ResultSet rs = null;
public ConnSQL(){
try {
Class.forName(sDBDriver); 
}
catch(java.lang.ClassNotFoundException e) {
System.err.println( e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
try {
connect = DriverManager.getConnection(url,user,password);
Statement stmt = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);

catch(SQLException ex) { 
System.err.println(ex.getMessage());
}
return rs;
}

public int executeUpdate(String sql) {
int result = 0;
try {
connect = DriverManager.getConnection(url,user,password);
Statement stmt = connect.createStatement();
result = stmt.executeUpdate(sql);

catch(SQLException ex) { 
System.err.println(ex.getMessage());
}
return result;
}
}
-----------------------------------------------------------------------在jsp页面中定义一个函数:
<%!
public static void createtable(String sql){String java_thread_sql=sql;
ResultSet java_thread_rs=conn.executeQuery(java_thread_sql); 
while(java_thread_rs.next()) {
out.print("<tr>");
out.print("<td width=\"24\" align=\"center\" valign=\"middle\"><span class=\"style3\">&#12539;</span></td>");
out.print("<td width=\"185\">");
out.print("<a href=\"showdoc.jsp?id="+java_thread_rs.getInt("id")+" target=\"_blank\" alt="+java_thread_rs.getObject("title").toString()+"\""+">");
out.print(substring(java_thread_rs.getObject("title").toString(),28,"")+"</a></td>");
out.print("<td width=\"67\"><span class=\"style1\">");
out.print(java_thread_rs.getObject("indate")+"</span></td>");
out.print("<td width=\"58\"><span class=\"style1\">");
out.print(java_thread_rs.getObject("looktime")+"</span></td>");
out.print("</tr>");
}
java_thread_rs.close();
}%>看看conn好使不好使,eclipse认不认???我必须要写成函数,因为我的JSP页面中有20几处需要上面函数相同的代码!!-----------------------------------------------------------------------
我在我本机上没有成功,错误提示如下:
Severity Description Resource In Folder Location Creation Time Id
2  cannot resolve symbol:  symbol  : variable conn index2.jsp javacn.cn/WebRoot line 6 2005年11月28日 9:41:24 351----------------------------------------------------------------------我发了二张贴子没有人答出来。http://community.csdn.net/Expert/topic/4422/4422431.xml?temp=.4005548
http://community.csdn.net/Expert/topic/4421/4421915.xml?temp=.1081354如果有高手解决。放分!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    你的conn是哪来的。
    前名定义的connection并不叫这个名字呀。
      

  2.   

    <jsp:useBean id="conn" scope="application" class="db.ConnSQL"/>conn是bean的id
      

  3.   

    不好意思。
    看错了。
    是bean的。晕了。。不看了。明天再看。回家。谁解决了记得给我点分就行了。
    是我帮你顶地。
      

  4.   

    如果没有看错的话,jsp肯定编译不通过。
    <jsp:useBean id="conn" scope="application" class="db.ConnSQL"/>
    只是创建了一个bean并放在application里面,jsp的代码中要用它必须取出来才行啊,不能直接引用的。如:
    db.ConnSQL conn = (db.ConnSQL)application.getAttribute("conn");
    或用查找也可以。当然,在标签中是可以直接使用的。
      

  5.   

    zhengcg(楚楚)说的应该没错,你只要把
    db.ConnSQL conn = (db.ConnSQL)application.getAttribute("conn");
    加到函数createtable()中
    ResultSet java_thread_rs=conn.executeQuery(java_thread_sql); 
    这条语句之前就行了!
    比如:
    String java_thread_sql=sql;
    db.ConnSQL conn = (db.ConnSQL)application.getAttribute("conn");
    ResultSet java_thread_rs=conn.executeQuery(java_thread_sql); 
    我没运行,你自己试试吧!:)
      

  6.   

    Ghost你越做离JAVA的web框架理念越远了....怎么可以把HTML写到一个JSP的method里呢?这不就成了最早最早servlet的模式了么?如果真想开始JAVA  去搞一本CORE JAVA看  然后接合网上的例子看看  耐心些可以少走很多弯路你这个页面不要继续了,delete掉吧
      

  7.   

    晕,挂月那这个问题我也得搞明白为什么访问不到CONN吧。。帮忙啊,大家。
      

  8.   

    String java_thread_sql=sql;
    db.ConnSQL conn = (db.ConnSQL)application.getAttribute("conn");
    ResultSet java_thread_rs=conn.executeQuery(java_thread_sql); 这样写出错,不行,提示为:
    Severity Description Resource In Folder Location Creation Time Id
    2  cannot resolve symbol:  symbol  : variable application index2.jsp javacn.cn/WebRoot line 6 2005年11月29日 12:01:28 365
      

  9.   

    如果使用<%%>因为这样声明是在方法public void _jspService(HttpServletRequest request, HttpServletResponse response)内进行声明,所以不能再声明方法而使用<!%%>是在_jspService方法外进行声明,所以可以声明createtable方法但是
    <jsp:useBean id="conn" scope="application" class="db.ConnSQL"/>声明默认是在_jspService方法内的,所以当使用<!%%>时,就不需要使用bean:userBean去掉jsp:useBean 
    String java_thread_sql=sql;
    db.ConnSQL conn = new db.ConnSQL();
    ResultSet java_thread_rs=conn.executeQuery(java_thread_sql); 
      

  10.   

    感谢myth822<%!
    public static void createtable(String sql) {
    String java_thread_sql = sql;
    db.ConnSQL conn = new db.ConnSQL();
    ResultSet java_thread_rs = conn.executeQuery(java_thread_sql);
    try {
    while (java_thread_rs.next()) {
    System.out.print("<tr>");
    System.out
    .print("<td width=\"24\" align=\"center\" valign=\"middle\"><span class=\"style3\">&#12539;</span></td>");
    System.out.print("<td width=\"185\">");
    System.out.print("<a href=\"showdoc.jsp?id="
    + java_thread_rs.getInt("id")
    + " target=\"_blank\" alt="
    + java_thread_rs.getObject("title").toString() + "\""
    + ">");
    System.out.print(substring(java_thread_rs.getObject("title")
    .toString(), 28, "")
    + "</a></td>");
    System.out.print("<td width=\"67\"><span class=\"style1\">");
    System.out.print(java_thread_rs.getObject("indate")
    + "</span></td>");
    System.out.print("<td width=\"58\"><span class=\"style1\">");
    System.out.print(java_thread_rs.getObject("looktime")
    + "</span></td>");
    System.out.print("</tr>");
    }
    java_thread_rs.close();
    } catch (Exception ex) {
    }
    }
    %>上面问题已经基本得到解决,呵呵,但还有一问就是,我用Eclipse发面完了站点之后,我的输出全部跑到eclipse中的console中了,并没有在我的IE界面中输出表格啊?这是为什么??
      

  11.   

    按照你这种方法在页面输出比较麻烦了,如果可能的话不要采用这种Model one的模式要在你的jsp前面引入
    javax.servlet.*;
    javax.servlet.http.*;
    javax.servlet.jsp.*;这些本应该是jsp的内置对象的,但是你的方法独立于 _jspService,所以要单独引用
    public static void createtable(String sql, HttpServletRequest request, HttpServletResponse response) java.io.IOException, ServletException  {
              _jspxFactory = JspFactory.getDefaultFactory();
          response.setContentType("text/html");
          pageContext = _jspxFactory.getPageContext(this, request, response,
           null, true, 8192, true);
          _jspx_page_context = pageContext;
          application = pageContext.getServletContext();
          config = pageContext.getServletConfig();
          session = pageContext.getSession();
          out = pageContext.getOut();
          _jspx_out = out;      out.write(...);  //使用这个方法去输出页面
    }
      

  12.   

    晕了,感谢八月兄,,你给的答案太复杂啦,呵呵,我不懂,,那我的答案可以不可以用另外一种方法呢??比如如果您遇到这种在函数中输出一个表格的功能,您是怎么实现的??因为我JSP页面中有20几处要输出相同的这样的表,,呵可,感谢
      

  13.   

    不行的话只有用<%%>在20处相同的地方把上面的都写一遍....
      

  14.   

    (↑八月的吟游者↑) 分析得很好,application在你的函数中肯定访问不到。但我觉得要解决楼主的问题根本就不用这么复杂啊。
    如果是我设计,就会做一个JSP,专门来解析这个根据输入的ResultSet(把这个对象放在request里)来显示,然后再做一个主JSP页面,根据递交的sql语句,先计算出ResultSet,循环引用(include)上个JSP页面来实现。当然更多的,我根本就不会把数据库连接、SQL之类的传递到JSP,而是在action里先处理,最好转化成普通Bean今后在传递到JSP。