使用jsp连接到tomcat服务器中的oracle数据库时出错

时间:2014-05-30 13:07:45

标签: java oracle jsp tomcat jdbc

尝试了一切,但无法解决问题。 我使用Windows 8企业版(如果这与问题有关)

  • Oracle 11.2.0
  • JDK 1.7.0
  • Apache tomcat Server 8.0
  • 编辑:记事本

我在d:中安装了oracle,在c:上安装了tomcat服务器。 我将jar文件ojdbc6.jar从oracle的lib目录复制到了tomcat的lib目录。 然后我在环境变量(系统变量)中创建了一个类路径,其值为"C:\Program Files\Apache Software Foundation\Tomcat 8.0\lib\ojdbc6.jar"

我的程序在记事本(.jsp文件)中如下:

<%@ page import="java.sql.*" %>
<html>
   <body>
       <%
           Connection conn;
           Statement st; ResultSet rs;
           new oracle.jdbc.OracleDriver();
           String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";
           String userId="system";
           String pwd="moon";
           conn=DriverManager.getConnection(dbURL,userId,pwd);
           st=conn.createStatement();
           rs= st.executeQuery("SELECT * FROM login"); 
           while(rs.next())
           {
               System.out.println(rs.getString(1)+""+rs.getString(2));
           }
       %>

   </body>
</html>

我检查了我的所有服务是否正在运行oracle以及tomcat服务器.`

修改

根据Chanda的评论,错误是:

HTTP状态500 - 在第14行处理JSP页面/page2.jsp时发生异常。第14行是conn = DriverManager.getConnection(dbURL,userId,pwd)

java.lang.ClassNotFoundException:org.apache.jsp.new_jsp服务器遇到内部错误,导致无法完成此请求。

3 个答案:

答案 0 :(得分:1)

我不建议你这样做。 Scriptlet代码和数据库调用不属于JSP。这是一个更长的讨论。

但直接的问题是您的连接网址不正确:

String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";

应该是

String dbURL="jdbc:oracle:thin:@localhost:1521:XE"

Tomcat将忽略所有系统环境变量。我建议您永远不要设置CLASSPATH。

正确的做法是将ojdbc6.jar放在Tomcat server / lib文件夹中。

在您的网络应用的WEB-INF / lib中添加其他第三方JAR。

       Connection conn;
       Statement st; 
       ResultSet rs;
       String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";
       String userId="system";
       String pwd="moon";
       try {
           Class.forName("oracle.jdbc.OracleDriver");
           conn=DriverManager.getConnection(dbURL,userId,pwd);
           st=conn.createStatement();
           rs= st.executeQuery("SELECT * FROM login"); 
           while(rs.next()) {
               System.out.println(rs.getString(1)+" "+rs.getString(2));
           }
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           DatabaseUtils.close(rs);  // implement static methods to do this.
           DatabaseUtils.close(st);
           DatabaseUtils.close(conn);
       }

我会推荐这样的东西:

public class DatabaseUtils {
    public static void close(Connection c) {
        try {
            if (c != null) {
                c.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // I'll leave the others for you.
}

答案 1 :(得分:0)

改善duffymo回答:

  • 方法forName不接受Class对象。
  • 由于您使用的是Java 7,因此可以使用try with resources。

所以解决这个问题的正确方法是:

   try {
       Class.forName("oracle.jdbc.OracleDriver");
   } catch (ClassNotFoundException ex) {
       // YOU MUST IMPROVE THE ERROR MANAGEMENT
       out.println("Error trying to load the OracleDriver, review the ojdbc6.jar!!");
       ex.printStackTrace();
   }

   String dbURL="jdbc:oracle:thin:@localhost:1521:XE";
   String userId="system";
   String pwd="moon";
   try (
     Connection conn = DriverManager.getConnection(dbURL,userId,pwd);
     Statement st=conn.createStatement();
   ){
       try {
           rs= st.executeQuery("SELECT * FROM login"); 
           while(rs.next()) {
               out.println(rs.getString(1)+" "+rs.getString(2)); //Maybe is prefereable print to HTTP response
           }
       } catch(SQLException sqlex) {
           out.println("Error executing query!!"+sqlex.getMessage());
           sqlex.printStackTrace();
       }
   } catch (SQLException e) {
       out.println("Error trying to connect to the database!!"+e.getMessage());
       e.printStackTrace();
   } 

建议:

  • 不建议从JSP调用数据库,可以搜索有关MVC dessign模式的信息。
  • 您还可以阅读一些有助于您实现MVC的框架:
    • Java Server Faces
    • Spring MVC
    • 检票

答案 2 :(得分:0)

最后我的问题得到了解决。 实际上我以前无法得到它。 我发现在我的系统oracle 10.2.0上安装了另一个版本的oracle。 我认为这是造成问题的原因。我从我的系统中删除了两个版本并重新安装了oracle 11g,并对我的程序进行了一些更改并且它有效。 这是我的程序,包含更改:

<%@ page import="java.sql.*" %>
<html>
<body>
<%
Connection conn;
Statement st;
ResultSet rs;
new oracle.jdbc.OracleDriver();
String dbURL="jdbc:oracle:thin:@localhost:1521:XE";
String userId="system";
String pwd="moon";

conn=DriverManager.getConnection(dbURL,userId,pwd);
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM login"); 

while(rs.next())
{%>
<%= rs.getString(1) %>
<%= rs.getString(2) %>
<% }

%>

</body>
</html>