MySQLを用いたjavaサーブレットでcom.mysql.jdbc.Driverがみつからないといわれてしまう
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 1,299
javaサーブレットでcom.mysql.jdbc.Driverがみつからないといわれてしまう
tomcatを使ったwebアプリケーションの学習をしているのですが,MySQLでDBとtableを構築し,そのtableをjavaサーブレットを用いてブラウザのページに表示するアプリケーションegilabを書いています.
eclipseなどは用いておらず,すべてターミナル上で行っています.
しかし,プログラムを実行してブラウザで確認してみると,
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
と表示されてしまいます.
サーブレットの名前はEgilabListServlet.javaで,sqlとのやり取りにMySQL Connector/jを用いているので,javacする際は,
javac -cp /usr/share/java/mysql-connector-java.jar:/usr/tomcat9/lib/servlet-api.jar EgilabListServlet.java
としています.
発生している問題・エラーメッセージ
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.NullPointerException
二行目のエラーはsqlとやり取りができていないために出現するエラーだと思います.
該当のソースコード
EgilabListServlet.java
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class EgilabListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head>"+"<title>EgilabListServlet</title>");
Connection con = null;
Statement st = null;
ResultSet rs = null;
String login = "root";
String passwd = "MySQLのパスワード";
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/egilab_db" + "?useUnicode=true&characterEncoding=UTF-8" + "&autoReconnect=true";
con = DriverManager.getConnection(url, login, passwd);
String sql = "SELECT * FROM egilab_tbl;";
rs = st.executeQuery(sql);
out.println("<table border=\"1\"> ");
out.println("<tr><td>name</td>"+"<td>grade</td>"+"<td>group</td></tr>");
while (rs.next()) {
out.println("<tr><td>" + rs.getString("name"));
out.println("</td><td>" + rs.getString("grade"));
out.println("</td><td>" + rs.getString("group") + "</td></tr>");
}
out.println("</table>");
} catch (Exception e) {
out.println("<p>" + e.toString() +"</p>");
} finally {
try {
rs.close();
st.close();
con.close();
} catch (Exception e) {
out.println("<p>" + e.toString() + "</p>");
}
}
out.println("</body></html>");
}
}
ディレクトリの構成図は以下の通りです.
/
|
usr
|
tomcat9
|
webapp
|
egilab
|
WEB-INF
|
classes, web.xml
|
EgilabListServlet.java, EgilabListServlet.class
xmlファイルの問題ではないような気がしていますが,web.xmlのソースも以下に示します.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>egilab</servlet-name>
<servlet-class>EgilabListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>egilab</servlet-name>
<url-pattern>/servlet/EgilabListServlet</url-pattern>
</servlet-mapping>
</web-app>
次にsqlの中身を記します
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| egilab_db |
| information_schema |
| music_db |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
今回使いたいのはegilab_dbのegilab_tblです
mysql> select * from egilab_tbl;
+----------+-------+------------+--------+
| name | grade | group_name | number |
+----------+-------+------------+--------+
| Taro | M2 | A | 1 |
| Jiro | M1 | B | 2 |
| Hanako | M1 | A | 3 |
| Saburo | M1 | C | 4 |
| Ichiro | | | 5 |
+----------+-------+------------+--------+
5 rows in set (0.01 sec)
試したこと
tomcatの再起動とMySQLの再起動は試したが変わらず.
補足情報(FW/ツールのバージョンなど)
mysql Ver 8.0.16 for Linux on x86_64
Server version: Apache Tomcat/8.5.40
OS:CentoOS7
よろしくおねがいいたします
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
おおよそ・・・
/usr/share/java/mysql-connector-java.jar
を
/usr/tomcat9/lib/mysql-connector-java.jar
にコピーしてください。
たぶんそれだけかと
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる