我的平台配置是:
   WindowsXP
   JDK1.4.2
   Tomcat5.0.28
   Oracle Driver:ojdbc14.zip报错的JSP页面代码如下:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%>
<html>
<body>
以下是从Oracle数据库读取的数据:<hr>
<table border=1>
<tr><td>id</td><td>书名</td><td>出版社</td><td>价格</td></tr>
<%    Class.forName("oracle.jdbc.driver.OracleDriver");
    String url="jdbc:oracle:thin:@localhost:1521:abc";
String uid="test";
String pwd="test";
    Connection con = DriverManager.getConnection(url,uid,pwd);
    Statement stmt=con.createStatement();
    ResultSet rst=stmt.executeQuery("select * from test.test_table where rownum<20");
    while(rst.next())
    {
    out.println("<tr>");
    out.println("<td>"+rst.getString("col1")+"</td>");
    out.println("<td>"+rst.getString("col2")+"</td>");
    out.println("<td>"+rst.getString("col3")+"</td>");
    out.println("</tr>");
    }
    //关闭连接、释放资源
    rst.close();
    stmt.close();
    con.close();
    %>    
</table>
</body>
</html>报错内容如下:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: oracle.jdbc.driver.OracleDriver
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.testOracle_jsp._jspService(testOracle_jsp.java:82)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1340)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:148)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:69)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:141)
org.apache.jsp.testOracle_jsp._jspService(testOracle_jsp.java:51)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.我将这个程序改成application如下,运行正常,并返回相应结果打印在屏幕上。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class Test {
public static void main(String[] args) throws Exception {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundException e) {
System.out.println("没有找到驱动");
}

String url = "jdbc:oracle:thin:@127.0.0.1:1521:abc";
String uid = "test";
String pwd = "test";
Connection con = DriverManager.getConnection(url, uid, pwd);
Statement stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("select * from test.test_table where rownum<20");

while(rs.next())
{
    System.out.println(rs.getString("col1"));
    System.out.println(rs.getString("col2"));
    System.out.println(rs.getString("col3"));
}

rs.close();
stmt.close();
con.close();
}
}请问JSP的错误是什么原因?

解决方案 »

  1.   

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    这是你的驱动没有找到,你把你oracle的驱动复制到common/lib下面。
    建意你升级一下你的JDK,最好使用1.5以上的。
      

  2.   

    谢谢你,果然是这样。
    奇怪了,为什么我把驱动放到WEB-INF/lib下没有效果呢?你能谈谈这两者哪个方式的差别么?我先不急结帖。
      

  3.   

    因为在common/lib下面的驱动可以被所有的WEB应用和TOMCAT服务器访问访问
    而WEB-INF/lib下面,只能够被当前的WEB应用访问,不能够被TOMCAT服务器访问。
    所以放驱动的时间,都放在common/lib下面
      

  4.   

    好,结贴了。
    也就是说,数据库驱动需要通过Web容器如tomcat去访问。(我的理解)
    谢谢btb368()!