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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

9131閲覧

DB接続がうまくいかない

rkgmpngn

総合スコア7

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/12/15 07:42

前提・実現したいこと

現在、JSP/サーブレットの勉強をしています。
アプリケーションからDB接続(mysql)を実現したいです。

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

DB接続がうまくいかなく、原因が特定できないです。
以下のエラーが出ます。
javax.servlet.ServletException: java.sql.SQLException: Cannot load JDBC driver class 'org.gjt.mm.mysql.Driver'
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
org.apache.jsp.lesson18.connect_jsp._jspService(connect_jsp.java:144)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

教本によると、META-INF配下のcontext.xmlにコードを記載するように書かれています。

ソースコード(context.xml) <Context displayName="JSP10 Samples" docBase="jsp10" path="/jsp10" reloadable="true"> <Resource name="jdbc/Jsp10" auth="Container" type="javax.sql.DataSource" username="user01" password="user01" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/jsp10?useUnicode=true&amp; characterEncoding=UTF-8" maxActive="4" maxWait="5000" maxIdle="2" validationQuery="SELECT count(*) FROM schedules" /> </Context>

試したこと

mysqlサーバ(localhost)が起動できていること
データベースの作成
ユーザ、パスワード
Connector/Jの****.jarが正しく配置されていること

は確認できています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

driverClassName="org.gjt.mm.mysql.Driver" は現在だと古いドライバにも見えます。

インストールされているMySQLのメジャーバージョンにもよりますが、5.x系なら、MySQL公式の5.x系のインストーラつきJDBCドライバで導入できますので、この中から、mysql-connector-java.jarをコピーして使います。

Webアプリケーションならば、WEB-INF/lib の中にコピーしましょう。

そしてドライバクラス名は、driverClassName="com.mysql.jdbc.Driver" です。

投稿2019/12/15 13:14

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rkgmpngn

2019/12/15 13:38

A-pZさん ご回答ありがとうございます。 どうやらご指摘の通り、5.x系のJDBC以外を使用していました。 (8.0を使っていました。なぜ最新の8.x系だとダメなのでしょうか。。) また、WEB-INF/libの中にコピー、driverClassName="com.mysql.jdbc.Driver"をすることで 接続がうまくいきました。 本当にありがとうございました。
guest

0

原因はエラーメッセージにはっきりと『Cannot load JDBC driver class 'org.gjt.mm.mysql.Driver'』[直訳][JDBCドライバ('org.gjt.mm.mysql.Driver'クラス)がロードできません]と書かれています。

JDBCドライバが無いか、適切でない場所に置かれている事が原因だと思われます。
JDBCドライバの所在を確認するのが、最初にすべきことと思います。

Servletはサーバ側で実行されるので、サーバ側にJDBCドライバが無いとダメですよ。(クライアント側にJDBCドライバがあっても、それをサーバ側からアクセスしてロードする訳にはいきませんから)

サーバ側の設定、ドライバの所在・配置を中心に確認してください。

=補足(追加説明)=
rkgm pnqnさんのマシンでは、2つのサーバ(WebサーバであるTomcatとDBサーバであるmysql)のプログラムと、1つのアプリケーションプログラムが稼働することになります。3つのプログラムは、同一のマシンで稼働しているので、2つのサーバはlocalhostのアドレスでアクセスできます(ポート番号が異なるので、IPアドレスが同じでも区別してアクセスできます。

「アプリケーションからDB接続(mysql)を実現」するためには、
1)アプレケーション(クライアントプログラム)からWebサーバ(Tomcat)に”DB(mysql)にアクセスする要求”が出される
2)要求を受けたWebサーバは、それを処理するサーブレットを起動する。
3)サーブレットは、DBにアクセスするためのJava共通APIであるJDBCのドライバをロードする
4)サーブレットは、JDBCドライバを使ってmysqlにアクセスして要求された動作(データの検索、挿入、更新、削除等)を行い、結果をクライアントに返す
5)クライアントは返された実行結果を使って、次の動作をおこなう
というような一連の動作が行われる必要があります。

今、問題が起きているのは 「3)サーブレットは、DBにアクセスするためのJava共通APIであるJDBCのドライバをロードする」の部分で、これはサーブレットに関連するファイルが足りないか、置き場所が間違えているというような、サーブレットに関係する部分のインストールに問題があるのだと思われます。

勉強で使っている”JSP/サーブレット”の本には、サーバやサーブレットをインストールする方法を説明している部分があると思いますから、それを参考にしてサーバやサーブレットを正しくインストールしてください。そうすれば、問題が解決すると思われます。

"サーブレット インストール方法"とか"JDBC インストール方法"とかのキーワードでWeb検索すると、参考になるWebページが見つかると思います。
それらの中で、・説明が判りやすい、・自分が使っているサーバ等のプログラムとバージョンが同じ(もしくは近い)、・最近書かれている(できれば1年以内)、といった条件に合うものを参考にすると良いです。

投稿2019/12/15 09:05

編集2019/12/15 12:48
coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rkgmpngn

2019/12/15 11:00

coco_bauerさん ご回答ありがとうございます。 「JSP&サーブレット」という本に沿って学習をしております。 初歩的な学習のため、TomcatとDBサーバをlocalhostに設定しております。 localhostの場合、サーバ側のドライバの所在はどこになるのでしょうか?
rkgmpngn

2019/12/15 13:42

coco_bauerさん 詳しいご回答ありがとうございます。 ご指摘の通り、ドライバとその置き場所が悪かったようでした。 本に書いてある場所だとうまくいかなく、A-pZさんご回答していただいたWEB-INF/libに置くべきでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問