Ошибка подключения к базе данных Oracle на сервере Tomcat с использованием JSP

1

Пробовал все, но не смог решить проблему. Я использую корпоративную версию Windows 8 (если это имеет какое-то отношение к проблеме)

  • Oracle 11.2.0
  • JDK 1.7.0
  • Apache tomcat Server 8.0
  • Редактор: блокнот

У меня есть оракул, установленный в d: и tomcat server на c :. Я скопировал файл 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 - Исключение произошло при обработке строки JSP/page2.jsp в строке 14. Строка 14 - conn = DriverManager.getConnection(dbURL, userId, pwd)

java.lang.ClassNotFoundException: org.apache.jsp.new_jsp Сервер обнаружил внутреннюю ошибку, которая помешала ему выполнить этот запрос.

  • 0
    И ошибка менструации есть ????
  • 0
    java.lang.ClassNotFoundException: org.apache.jsp.new_jsp Сервер обнаружил внутреннюю ошибку, которая не позволила ему выполнить этот запрос.
Теги:
jsp
tomcat
jdbc

3 ответа

1
Лучший ответ

Я бы не рекомендовал вам это делать. Код сценария и вызовы базы данных не принадлежат JSP. Это гораздо более продолжительное обсуждение.

Но непосредственной проблемой является неправильный URL вашего соединения:

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

должно быть

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

Tomcat будет игнорировать все переменные системной среды. Я бы рекомендовал, чтобы у вас никогда не было CLASSPATH.

Правильная вещь - положить ojdbc6.jar в папку Tomcat server/lib.

Добавьте другие сторонние JAR в WEB-INF/lib вашего веб-приложения.

       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.
}
  • 0
    это все еще показывает ту же ошибку в строке conn = DriverManager.getConnection (dbURL, userId, pwd);
  • 1
    В чем ошибка?
Показать ещё 5 комментариев
0

Наконец моя проблема решена. На самом деле я не мог получить его раньше. Я обнаружил, что в моей системе oracle 10.2.0 была установлена другая версия оракула. Я думаю, что это создало проблему. Я удалил обе версии из своей системы и снова установил 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>
0

Улучшение ответа duffymo:

  • Метод forName не принимает объект класса.
  • Поскольку вы используете Java 7, вы можете использовать try с ресурсами.

Таким образом, правильный способ решить эту проблему:

   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.
  • Также вы можете прочитать о некоторых фреймворках, которые помогут вам реализовать MVC:
    • Ядро сервера Java
    • Spring MVC
    • калитка
  • 0
    Хороший улов для forName; благодарю вас. Лично мне не нравится вложение попытаться / поймать таким образом. Я думаю, что это загромождает код без необходимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню