Webシステム開発講座へようこそ!
前回の記事では、システム開発で代表的な「MVCモデル」について学習しました。
今回はいよいよ、MVCモデルにデータベース接続(JDBC)を組み込み、データの取得・活用を行っていきます。
本記事で学べること
✅ DB接続の実装:JDBCを使ってMySQLと接続し、データを取得・活用する方法を学びます。
この記事は次のような方におすすめです:
💡 初めてデータベースを操作する方
💡 JavaとMySQLの連携にチャレンジしてみたい方
📌事前準備
この記事を進める前に、前回の記事「【Webシステム開発講座#10】MVCモデルとは?実際のフォルダ構成とプログラム修正で理解しよう!」をご覧ください。
まだ読んでいない方は、以下のリンクからどうぞ:
1. まずは処理の全体像を確認しよう!
今回の目的は、ユーザーがログインフォームに入力した情報を、DBに照合してログイン認証する仕組みを作ることです。
この処理は MVCモデル に基づいて進みます。大まかな流れは以下の通りです:
- View: ユーザーがフォームに入力し、データを送信
- Controller: リクエストを受け取り、Modelに照合処理を依頼
- Model: DBに接続してユーザー情報を検索
- Controller: 結果に応じて画面を分岐
- View: 成功→メニュー画面へ/失敗→ログイン画面に戻ってエラー表示
全体の処理フローは次のようになります:
login.jsp(View)
↓ フォームからユーザー名・パスワードをPOST送信
LoginServlet(Controller)
↓ 受け取った情報をUserDAOに渡して照合を依頼
UserDAO(Model)
↓ DBと接続し、該当ユーザー情報を検索
LoginServlet(Controller)
↓ 結果に応じて画面を分岐
├─ 成功 → menu.jsp(View)
└─ 失敗 → login.jspを再表示(エラー表示)
2. DBUtil:共通のDB接続クラスを作ろう!
MVCモデルの実装の前にMySQLとのDB接続処理を確立するクラスDatabaseConnection.java
の実装を行います。
フォルダ構成
JDBCを使ってデータベースにアクセスするには、以下のような処理が毎回必要になります:
- JDBCドライバの読み込み
- 接続URL、ユーザー名、パスワードの指定
- 接続の生成(
DriverManager.getConnection
)
これらを毎回書くのは大変ですし、修正が必要になった時に複数ファイルを直す必要が出てしまいます。
そのため、共通処理はユーティリティクラス(共通クラス)にまとめておくと便利です。
ここでは「DBUtil
」という名前で共通クラスを作成します。
このクラスは、Javaプロジェクト内の src/utils
フォルダを新規に作成して配置しましょう。
このように utils
パッケージを作成しておくことで、DAOやServletなど、複数のクラスから再利用しやすくなります。
接続先テーブル情報は過去記事で設定したテーブル情報ですね。
DBUtil.java のソースコード
package utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/接続先DB名"; private static final String USER = "接続用ログインID"; private static final String PASSWORD = "接続用パスワード"; public static Connection getConnection() throws SQLException { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { throw new SQLException("JDBCドライバの読み込みに失敗しました。", e); } return DriverManager.getConnection(URL, USER, PASSWORD); } }
このクラスを使うことで、DAOクラスなどから以下のように簡単に接続が取得できます:
Connection conn = DBUtil.getConnection();
また、接続情報(URLやユーザー名など)を一箇所で管理できるため、保守性が向上します。
3:Model|JDBC接続とDAOの実装
DB接続用の共通クラス DBUtil
(utils
パッケージ)を準備したので、ここからはModel(ビジネスロジック層)として、データベースからユーザー情報を取得する処理を実装していきます。
この章では、「ユーザー名とパスワードが正しいかどうか」を確認する UserDAO
クラスを作成します。
このクラスは、ログイン認証処理の要となる部分で、Controller(Servlet)から呼び出される役割を担います。
💡 DAO(Data Access Object) とは、データベースへのアクセス処理を専門に担当するクラスのことです。
たとえば「データの検索」「登録」「更新」など、SQLに関わる処理をまとめて管理します。
こうした役割をDAOクラスに分離することで、ControllerやViewのコードがシンプルになり、保守しやすく、再利用しやすい設計が実現できます。
パッケージと配置場所
UserDAO.java
は、src/models
フォルダ内に配置します。
UserDAO.java のソースコード
package models; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import utils.DBUtil; public class UserDAO { /** * ユーザー認証を行う * @param username 入力されたユーザー名 * @param password 入力されたパスワード * @return ログイン成功ならtrue、失敗ならfalse */ public boolean checkLogin(String username, String password) { String sql = "SELECT * FROM account_master WHERE user_id = ? AND password = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, username); stmt.setString(2, password); ResultSet rs = stmt.executeQuery(); return rs.next(); // レコードが存在すればログイン成功 } catch (SQLException e) { e.printStackTrace(); return false; } } }
DAOクラスでは、SQL文を使ってデータを取得し、ログイン判定を行っています。
ここで重要なのは、Servletに直接DBアクセス処理を書かず、責務をModelに分離している点です。
次の章では、この UserDAO
を呼び出すController(LoginServlet
)を実装していきます。
4:Controller|LoginServletの実装
それでは、LoginServlet
に以下のような修正を加えて、ユーザー名とパスワードによる認証処理を追加します。
✅ ログイン成功/失敗によって、遷移先をmenu.jspまたはlogin.jspに分ける
✅ セッションにユーザー名を保持
修正前は、単にユーザー名をセッションにセットし、menu.jsp
へ強制遷移していましたが、
修正後は データベースに登録されたユーザー情報と照合してから、ログインを許可するようにします。
LoginServletの修正(変更部のみ)
// ★ 追加:DAOのインポート
import models.UserDAO;
// ★ 変更前:ユーザー名だけでログイン成功扱い String username = request.getParameter("username"); HttpSession session = request.getSession(); session.setAttribute("loggedInUser", username); response.sendRedirect(request.getContextPath() + "/MenuServlet");
👇👇👇
// ★ 変更後:DAOでログイン認証を行う String username = request.getParameter("username"); String password = request.getParameter("password"); UserDAO dao = new UserDAO(); boolean isValidUser = dao.checkLogin(username, password); if (isValidUser) { // ログイン成功:セッションに保持&menu.jspへ遷移 HttpSession session = request.getSession(); session.setAttribute("loggedInUser", username); RequestDispatcher dispatcher = request.getRequestDispatcher("/views/menu.jsp"); dispatcher.forward(request, response); } else { // ログイン失敗:エラーメッセージを表示してlogin.jspに戻る request.setAttribute("error", "ユーザー名またはパスワードが間違っています"); RequestDispatcher dispatcher = request.getRequestDispatcher("/views/login.jsp"); dispatcher.forward(request, response); }
5:View|login.jspへエラーメッセージが表示されるように変更
ログイン失敗時にエラーメッセージを表示させるようにしていますが、login.jsp
を変更しないと現状ではエラーメッセージが表示されません。login.jsp
を以下のように変更しましょう。
login.jspの変更(修正部のみ表示)
<label><b> Ver.1.0.0 </b></label> <!-- ★エラー表示追加 --> <c:if test="${not empty error}"> <p style="color: red;">${error}</p> </c:if> <form action="${pageContext.request.contextPath}/controllers/LoginServlet" method="POST">
ログイン失敗後、以下のような画面が表示されるようになると成功です。
補足:JSTLライブラリの導入について
今回のエラーメッセージ表示では <c:if>
や ${error}
といった JSTL(JSP Standard Tag Library)を利用しています。
JSTLの使い方や導入手順については、別記事で詳しくご紹介しますので、そちらをご覧ください。
すでにJSTLを利用できる環境であれば、ここで紹介したコードをそのまま使ってエラーメッセージを表示できます。
ここまでで、環境構築から始まり、実際にJavaでプログラムを組んで、データベースと接続し、ログイン認証を行うまでの基本的なWebシステムの流れを体験してきました。
このレベルの内容をある程度理解し、自分で実装できるようになれば、新人SEとしても十分に現場で評価されるスキルです。履歴書にも自信を持って書けるレベルと言えるでしょう。
次回以降も記事は続きますが、今後は趣味や応用的な内容(UI改善やAPI連携など)も含んでいく予定です。
「Webシステム開発をもっと勉強したい!」という方は、引き続きチェックしていただけると嬉しいです!
これからも、楽しみながら一歩ずつスキルアップしていきましょう!
「記事の更新を待てない!」「すぐに動画で学びたい!」という方には、Udemyでの学習がおすすめです。
私自身も利用して、基礎から応用までしっかりと学べたので、非常に助かりました!ぜひ一度チェックしてみてください。
Udemyについての詳しい記事はこちらをご参照ください。