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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

1763閲覧

Eclipse+mySql+Mac で 404エラーとDBへの接続失敗 の原因をご教示ください

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/05/16 00:58

編集2019/05/16 01:41

前提・実現したいこと

java 初学者です。初めて質問させて頂きます。質問の記載法や内容に不備があれば、ご指摘下さいませ。

「スッキリわかるサーブレット&JSP」という書籍を参考に、
eclipseで、WEBアプリケーションの設計を練習するための動的プロジェクト、"sukkiliShop"のログイン部分を作成中です。

書籍の設定では、  
・ サーブレットからフォーワードされたJSPの画面にある「ログイン」をクリックすると、当該サーブレットにリンクされていて、一度こちらにリクエストしてからdoGetメソッドでログイン画面にフォーワードされる。

・ ログイン画面でuser_id と password を入力し、その情報が DB に保存されたものと相違がなければ、結果画面に遷移する、
という流れになっています。

設計手法として、まず「BO と DAO に当たるクラスと、そのテストを行うクラス(入力情報ではなく、テストクラスに直接値を代入する静的なテスト)のサーブレットを作成、実行して、この段階で誤りがないか確認する」 とあるのですが、
①テストクラスのサーブレット AccountDAOTest を右「クリック -> アプリケーションで実行」すると、接続に失敗します。
(例外処理の表示によりドライバクラスは見つかっているようです)

そこで、「試したこと」⑶ の状態にあって、行き詰まってしまいました。

書籍ではOSは Windows、データベースはH2 DBの使用を前提としているのですが、私はMac を使用していて、ネット上に H2DB + mac の情報が少なく、接続等が上手くいかなかったので、情報量が多かった mySql を使用しています。

エラーの原因として考えられることがあれば、ご教示いただけないでしょうか?
よろしくお願い致します。

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

404 Not Found massage: /sukkiliShop/ 説明:  The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. 以上は、「試したこと」⑶ に関するエラー  ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 以下は、「前提・実現したいこと」①に関するエラー Tue May 14 10:14:46 JST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1714) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2199) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2230) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2025) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:778) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at dao.AccountDAO.findByLogin(AccountDAO.java:24) at test.AccountDAOTest.testFindByLogin2(AccountDAOTest.java:29) at test.AccountDAOTest.main(AccountDAOTest.java:10) 接続に失敗しました testFindByLogin2:succsess

該当のソースコード

Java

1 2package dao; 3 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9 10import model.Account; 11import model.Login; 12 13 public class AccountDAO{ 14 private final String DRIVER_NAME = "com.mysql.jdbc.Driver"; 15 //private final String JDBC_URL="jdbc:mysql://localhost/sukkiliShop?autoReconnect=true&useSSL=false"; 16 private final String JDBC_URL="jdbc:mysql://localhost/sukkiliShop"; 17 private final String DB_USER = "root"; 18 private final String DB_PASS = " "; 19 20 public Account findByLogin(Login login) { 21 Connection conn = null; 22 Account account =null; 23 try { 24 Class.forName(DRIVER_NAME).newInstance(); 25 conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); 26 String sql="SELECT user_id,pass,mail,name,age FROM ACCOUNT WHERE user_id = ? AND pass = ?"; 27 PreparedStatement pStmt = conn.prepareStatement(sql); 28 pStmt.setString(1,login.getUserId()); 29 pStmt.setString(2,login.getPass()); 30 ResultSet rs = pStmt.executeQuery(); 31 if(rs.next()) { 32 String userId = rs.getString("user_id"); 33 String pass = rs.getString("pass"); 34 String mail = rs.getString("mail"); 35 String name = rs.getString("name"); 36 int age = rs.getInt("age"); 37 38 account = new Account(userId,pass,mail,name,age); 39 } 40 }catch(SQLException e) { 41 e.printStackTrace(); 42 System.out.println("接続に失敗しました"); 43 return null; 44 }catch(ClassNotFoundException e) { 45 e.printStackTrace(); 46 System.out.println("ドライバが見つかりません"); 47 return null; 48 }catch(Exception e) { 49 e.printStackTrace(); 50 System.out.println("接続に失敗しました"); 51 return null; 52 }finally { 53 if(conn != null) { 54 try { 55 conn.close(); 56 } catch (SQLException e) { 57 // TODO 自動生成された catch ブロック 58 e.printStackTrace(); 59 return null; 60 } 61 } 62 }return account; 63 } 64 } 65 66 67package test; 68 69import dao.AccountDAO; 70import model.Account; 71import model.Login; 72 73public class AccountDAOTest{ 74 public static void main(String[] args) { 75 testFindByLogin1(); 76 testFindByLogin2(); 77 } 78 public static void testFindByLogin1() { 79 Login login = new Login("minato","1234"); 80 AccountDAO dao = new AccountDAO(); 81 Account result = dao.findByLogin(login); 82 if(result!=null && result.getUserId().equals("minato") 83 && result.getPass().equals("1234") 84 && result.getMail().equals("minato@sukili.com") 85 && result.getName().equals("湊 雄輔") 86 && result.getAge()==23) { 87 System.out.println("testFindByLogin1:succsess"); 88 }else { 89 System.out.println("testFindByLogin1:failed"); 90 } 91 } 92 public static void testFindByLogin2() { 93 Login login = new Login("minato","12345"); 94 AccountDAO dao =new AccountDAO(); 95 Account result=dao.findByLogin(login); 96 if(result == null) { 97 System.out.println("testFindByLogin2:succsess"); 98 }else { 99 System.out.println("testFindByLogin2:failed"); 100 } 101 } 102}

試したこと

⑴接続先 DB の名前,テーブル名などの確認
⑵結局分からず中断しましたが、SSLを使用して接続しようとしてみましたが、関係あるのでしょうか??

⑶同じワークスペースで作った別の動的プロジェクト(DB使用)は完成していて、「プロジェクト名右クリック -> サーバで実行」で最後の処理まで問題なく表示できます。
そこで試しに、残りのビューやコントローラのサーブレット・JSPを作成し、プロジェクト名から実行できる様に、WEB-INF直下に最初の画面を表示するindex.jspを作成しましたが、今度は 404 NotFound が表示されてしまいます。

※DB名は sukkiliShop にして、ログイン情報をテーブル ACCOUNT に保存しています。JDBCのURL、ユーザーネーム、パスワードは当該別プロジェクトと同じmのを使用しています。

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

※「該当のソースコード」は全てではありませんが、多くなるので、とりあえず接続部分とテストのコードを記載します。

Server version: Apache Tomcat/7.0.91

OS Name: Mac OS X
OS Version: 10.14.4

Eclipse Java EE IDE for Web Developers.
Version: 2018-09 (4.9.0)

mysql-connector-java-5.1.47
mysql Ver 8.0.16 for osx10.14 on x86_64 (Homebrew)

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

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

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

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

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

m.ts10806

2019/05/16 01:28

>質問の記載法や内容に不備があれば 不備というわけではないですが、個人的にはあまり太字だらけでも読みにくいかなぁと。(今回修正するのは面倒だと思うので次回以降気を付けてもらうので良いです) あと、これは修正してもらいたいのですが、 コードブロックにするとワンクリックでその内容がコピーできるようになります。これは「見ている人がすぐに動作確認できるように」という配慮のためについている機能なのですが、実際のコード以外の記述が入り込むとそこを削らないと動かないので、手間が発生しますし削ったとしても実際のコードと全く同じものとは限らないので(スペースとかも含めて「実際のコード」である必要があるため)、よろしくありません。 実際のコードにない部分はコードブロックから出してください。それか、さいあく、コメントアウトにしてもらえると。コピペでそのまま現象確認できれば良いので。
退会済みユーザー

退会済みユーザー

2019/05/16 01:44

mts10806 様 修正依頼のコメントありがとうございました。 修正いたしましたが、未だおっしゃられている事を満してい場合は、 お手隙でご連絡下さいませ。
jimbe

2019/05/16 05:05 編集

> java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) データベースに DB_USER と DB_PASS で接続できるかをテストされていますでしょうか.
退会済みユーザー

退会済みユーザー

2019/05/16 05:20

jimbe 様 コメントありがとうございます。 まさに、なぜ接続出来ないかが悩ましいところで、 「試したこと」⑶にあるように、他のプロジェクトで接続・データを取得が出来ているので、同じDB_USER と DB_PASSをコードに設定しています。 (DB_USER と DB_PASSはデフォルトのままで、変更・追加していないので) または、同じDB_USER と DB_PASSで、eclipseの別のプロジェクトのDBへは接続出来ないような事はあるのでしょうか??
jimbe

2019/05/16 05:37

JSP やサーブレットなど関係なく, 単純にデータベースに接続するだけの単体プログラムを作成して実行してみては如何でしょうか. > eclipseの別のプロジェクトのDBへは接続出来ないような事 URL が合っていれば出来そうですが, すみません詳しくありません. 上に書きました「接続するだけの単体プログラム」をその別プロジェクトでも実行してみて, こちらでは繋がらないのに向こうでは繋がるとすれば, なにか環境的な違いがあるということになるように思います.
退会済みユーザー

退会済みユーザー

2019/05/16 06:20 編集

jimbe 様 ありがとうございます。 >「接続するだけの単体プログラム」をその別プロジェクトでも実行してみて... 別のプロジェクトでは、JSP入力画面から取得した文字列をDBに保存して、 それを次のJSP画面に表示することが出来ていますので、問題ないと思ったのですが、 単体だと出来なくなったり、エラーの表示が変わってヒントになるような可能性はあるのでしょうか?? >なにか環境的な違いがあるということになるように思います... 一応 eclipse のプロジェクト・エクスプローラでライブラリーにあるjarファイルの数や相違も比べてみたのですが、同じでした。 ややこしい質問で申し訳ありません。 もしお忙しければ、また、何か思いついたら是非お願い致します。
jimbe

2019/05/16 07:01

デバッグは, 常に確認することです. 自分ではそんなはずは無いと思っていても, それでもなお確認して可能性を潰していきます. 向こうで動いているのを持ってきたはずなのにこちらでは動かないのですから, こちらのコードを向こうで動かそうしてみれば, 何か分かるかもしれないということを申し上げています. その際にまさか全部持っていくわけにも行かないでしょうから, 例外が発生している箇所を含む極力小さく他への影響の無いコードを準備されたほうが良いかと思いました. もちろんそれをこちらで実行して確実に例外が発生することを確認しないといけませんし, もしそれで発生しなかったら, それを含む元のコードの他の部分が原因になっている可能性が発生します. こちらで例外が発生し, 向こうではやはり発生しなかった, やはりやるだけ無駄だった…となるかもしれませんが, この実験によって, その小さいコードに影響する環境が小さくなれば, 確認が必要な範囲は減らせるのではないでしょうか.
退会済みユーザー

退会済みユーザー

2019/05/17 10:09 編集

jimbe 様 理解力がなく申し訳ありません。 ご丁寧に説明いただきありがとうございました。 初心者なもので、ログを見ても、具体的にどのようにアプローチすれば良いのか、分からない部分が多かったのですが、例外の対処の仕方のヒントになりました。 本日はまだ試しておりませんが、後日確認してみようと思います。
退会済みユーザー

退会済みユーザー

2019/05/21 21:15

jimbe様 投稿が遅くなり申し訳ありません。 仰せの通り一つずつ対処している途中で無事接続できました。 丁寧にご対応いただき有り難うございました。
guest

回答1

0

ベストアンサー

ひとつずつコメントアウト、部分的なサーブレットを作成し、
見直す方法で解決いたしました。

投稿2019/05/21 21:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問