質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.04%

(JAVA)JSPでデータベースを接続しても、エラーが発生する

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,237

yoshim95

score 10

前提・実現したいこと

JSPを用いて、データベースに格納した学生情報の表示をするプログラムを作っております。ですが、そのデータベースを用いたJSPを起動しても、エラーが発生します。データベースは、Oracle11gを使用しています。

発生している問題・エラーメッセージ

type 例外レポート

メッセージ javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

説明 The server encountered an internal error that prevented it from fulfilling this request.

例外
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:560)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


原因
javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
    org.apache.jsp.List_jsp._jspService(List_jsp.java:168)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


原因
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:125)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:62)
    java.lang.Class.forName0(Native Method)
    java.lang.Class.forName(Class.java:264)
    org.apache.jsp.List_jsp._jspService(List_jsp.java:119)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
重大:Servlet.service() for servlet [jsp] in context with path [/(プロジェクト名)] threw exception [javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver] with root cause

該当のソースコード

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  <!-- JDBCのために必要なインポート文 -->
  <%@ page import="java.sql.*"%>

  <!-- Oracle JDBC Driver のロード -->
  <% Class.forName("oracle.jdbc.driver.OracleDriver");%>

  <!-- connection の作成 -->
  <% Connection conn = DriverManager.getConnection("jdbc:oracle:thin:(ホスト名):(ポート番号):(SID)","(ユーザー名)","(パスワード)");%>

  <!-- Statement の生成 -->
  <% Statement stmt = conn.createStatement();%>

  <% ResultSet rset = stmt.executeQuery ("SELECT * FROM STUDENT");%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>学生情報一覧</title>
</head>
<body>

<%
        while (rset.next ()) {
          out.print("<tr>");
          out.print("<td>" + rset.getInt(1) + "</td><td>"
                           + rset.getString(2) + "</td><td>"
                           + rset.getString(3) + "</td><td>"
                           + rset.getString(4) + "</td>");
          out.print("</tr>");
        }
      %>

</body>
</html>

JSP内でそれぞれ表示する情報

rset.getInt(1):学生番号
rset.getString(2):名前
rset.getString(3):生年月日
rset.getString(4):住所

試したこと

環境変数のCLASSPATHに「ojdbc.jar」のパスを設定しないと読み込めないそうであるが、設定済み。
WEB-INF下のlibにojdbc.jarのファイルを置いてみたが読み込めませんでした。

補足情報(言語/FW/ツール等のバージョンなど)

開発環境:Eclipse4.6
DB:Oracle11g
JDK:jdk-8u102-windows-x64
TomCat:8.0

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

動的Webプロジェクトの /WebContent/WEB-INF/lib 以下に ojdbc.jarを配置したのに動かない場合は、プロジェクトのビルドパスからjarファイルが除外されているか、サーバにデプロイしたアプリケーションに含まれていないのでしょう。

正しく配置されているかは次の図のように、「デプロイ済みリソース」に含まれる WebContent/WEB-INF/lib にjarファイルが自動的に配置されます。

動的Webプロジェクトのプロジェクトエクスプローラ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/25 17:21

    デプロイ済みリソースのフォルダが、JavaScriptリソースの下に表示されていませんが、デプロイしないと出ないのですか?
    また、デプロイはどのように行えばいいですか?

    キャンセル

  • 2016/12/25 17:29

    動的Webプロジェクトでプロジェクトを作成すれば、デプロイ済みリソースは常に表示されます。

    Eclipseのサーバへデプロイする方法は、今すでにJSPが実行されているなら、それはすでにデプロイされています。

    キャンセル

  • 2016/12/25 21:45

    私の場合は、動的Webプロジェクトでプロジェクトを作成しても、表示がされていないです。

    キャンセル

  • 2016/12/26 12:23

    WEB-INFのlibにOracleのclient_1の中のojdbc5を入れたら表示されました。
    ojdbcが合っていないのが原因でした。
    ありがとうございました。

    キャンセル

0

環境変数のCLASSPATHに「ojdbc.jar」のパスを設定しないと読み込めない

これは一般のjavaアプリケーションを動かす際の話だと思いますが、JSPだと「tomcatなどを利用する際にページ内から利用したいライブラリーをどう設定すべきか」を知っておく必要があると思います。「jsp tomcat classpath」などで検索すると解説ページが見つかると思います。「WEB-INF/libの下においておけばよい」といった方法が書いてあるみたいですよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/24 18:57

    置いてみましたが、上手くいきませんでした。

    キャンセル

  • 2016/12/24 19:12

    そうでしたか。自分はJSP/Oracleの環境について暗い(環境を持ってない)ので今のところこれ以上の知識がありません。ちなみにOracleのJDBCドライバーのページをみると環境によって使用するjarの名前が違うといった情報もありましたのでJDKのバージョンやOSの種類・バージョンTomcatのバージョンなども追記するとよいかも知れません。

    キャンセル

0

tomcatを使用している、かつEclipseのServerでの実行を使用していないならば、インストールしたtomcatフォルダ配下のlibディレクトリに入れればよかった気がします。

http://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&_10g

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/24 23:42

    Eclipseでのサーバーを実行しております。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る