【Webシステム開発講座#11】MVCモデルでJDBC接続を組み込もう

Webシステム開発講座へようこそ!

前回の記事では、システム開発で代表的な「MVCモデル」について学習しました。

今回はいよいよ、MVCモデルにデータベース接続(JDBC)を組み込み、データの取得・活用を行っていきます。

本記事で学べること

✅ MVCモデルの理解:MVCモデルの構造と役割を実例で理解します。
✅ DB接続の実装:JDBCを使ってMySQLと接続し、データを取得・活用する方法を学びます。

この記事は次のような方におすすめです:

💡 Webシステム開発をこれから学ぶ方
💡 初めてデータベースを操作する方
💡 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接続用の共通クラス DBUtilutilsパッケージ)を準備したので、ここからは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に分離している点です。

💡 DAOは「Model層」の中心です。データベース操作はDAOにまとめておくことで、コードの見通しが良くなり、再利用性・テスト性も高まります。

次の章では、この UserDAO を呼び出すController(LoginServlet)を実装していきます。

4:Controller|LoginServletの実装

それでは、LoginServlet に以下のような修正を加えて、ユーザー名とパスワードによる認証処理を追加します。

UserDAOを使ってログイン情報をチェック
ログイン成功/失敗によって、遷移先を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についての詳しい記事はこちらをご参照ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。