我的平台配置是:
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的错误是什么原因?
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的错误是什么原因?
这是你的驱动没有找到,你把你oracle的驱动复制到common/lib下面。
建意你升级一下你的JDK,最好使用1.5以上的。
奇怪了,为什么我把驱动放到WEB-INF/lib下没有效果呢?你能谈谈这两者哪个方式的差别么?我先不急结帖。
而WEB-INF/lib下面,只能够被当前的WEB应用访问,不能够被TOMCAT服务器访问。
所以放驱动的时间,都放在common/lib下面
也就是说,数据库驱动需要通过Web容器如tomcat去访问。(我的理解)
谢谢btb368()!