はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

(Javaでの)MVCモデル メモ

Java での)MVCモデル メモ

Java MVCモデルについてのメモ。

環境

MVCモデルの考え方

MVCモデルとは

「3つの役割」でアプリケーションを設計する設計思想。

  • M Model モデル

  • V View ビュー

  • C Controller コントローラ

MVCモデルで Webアプリケーションが作られているパターンが多い。

MVCモデルの概要

  1. ユーザがリクエス

  2. コントローラ(C)が 、リクエストを受け取り、 モデル(M)で処理するよう指示する。、

    また、ビュー(V)に表示するするよう指示する。

  3. モデル(M)でデータを処理する。

  4. ビュー(V)が、 モデル(M)から処理した表示したいデータを参照して、 レスポンスを返す。

ざっくりまとめると以下のようなる。

  • Model:処理

  • View:見た目

  • Controlle:窓口

MVCモデルのメリット

  • システムの構成がわかりやすくなる。

  • システムの保守がしやすくなる。

    システムの構成がわかりやすくなっているので、 、どこを直せばいいかわかりやすくなる。

  • Webデザイナー、プログラムの役割分担が明確になる。

    JSPではJavaのプログラムをかけるが、書きすぎると 境界がわかりづらくなる。MVCモデルで設計することで多少解消できる。

MVCモデルの簡単な歴史

もともとはSmalltalkというプログラム言語の設計に用いる考え方だった。 MVC1やSmalltalk MVC とも呼ばれる。

特徴:
モデルで処理される結果がリアルタイムに反映される。
モデルを起点に動作していた。

従来のMVCの問題・課題

実際のWebアプリケーションでは、 HTTPで動作しているので、 モデル起点でなくリクエスト起点で処理を開始した方が良い課題があった。

MVC2の登場

Smalltalk以外の言語でも動作し、また、 Webアプリケーション用に役割が見直されたものが、 MVC2(またはMVCモデル2)と呼ばれいている。

現在、一般的に「MVCモデル」といわれるのは、これにあたる。

参考:http://www.s-arcana.co.jp/tech/2011/07/mvc-mvc2.html

MVCの役割

C コントローラ

リクエストの受付窓口兼みんなの司令塔。 リクエストを受付け、モデル及びビューに指示を出す。

Model モデル

ビューに表示するデータの番人。 基本的にDBから取得したデータを預かっておく、

モデルがDBにアクセスし処理する。 DBそのものがモデルではない。

View ビュー

画面表示の仕上げ担当。 モデルの情報を参照して結果を表示する。

MVCモデルでWebアプリケーションを作ったサンプル

サンプルの構成

  1. 最初にリクエストがあったら、 Controllerが受け取ってViewに指示して、 「ID入力画面」をレスポンスとして返す。

  2. ユーザーがIDを入力したリクエストがあったら、 Controllerが受け取って、ModelにID照会を指示する。

  3. 該当IDであれば、ControllerがViewに指示して、 「正常処理の画面」をレスポンスとしてユーザーへ返す。

    該当IDでなければ、Viewに指示して、 「失敗処理の画面」をレスポンスとして返す。

  • Controller

    • ControllerServlet.java

  • View

    • ID入力画面: request.jsp

    • 正常処理の画面:

      userResponse.jsp

    • 失敗処理の画面:

      userError.jsp

  • Model

    • UserBean.java

  • ModelとControllerの橋渡し:IdProcessing.java

コード

Java MVCのサンプル。「ID入力画面」を操作する。

実行結果

まず、/View/userRequest.jsp にアクセス。

ID入力画面
ID入力画面

正しいIDを入力した場合。

IDを入力
IDを入力
正常処理
正常処理

違うIDを入力した場合。

エラー処理
エラー処理

もし、「cannot be resolved to a type」というエラーが出た場合

主な理由2つ。

  • 必要なクラスがインポートされていない。

    「デフォルト・パッケージ」ではインポートされないので注意。

  • ServletでsetAttributeするときのクラスと、 Jspのクラスが一致していない。

参考:cannot be resolved to a typeへの対処法

Webアプリケーションの例外処理

以下の様なTomcat(サーバー)側のエラーが出る場合がある。

Tomcat(サーバー)側のエラーが表示されてしまうのは危険

Tomcat(サーバー)側のエラー

サーバーの種類など様々な情報が表示され、 特定されてしまうので危険。

例外が発生した場合、 エラーページに移動させるように処理を組み混んでおくよう意識する。

    例:
  • IDが一致しない場合

  • サーバー処理でエラーが発生した場合

まとめ

  • MVCモデルは、「モデル」、「ビュー」、「コントローラ」 の役割分担でWebアプリケーションを設計する思想

  • MVCモデルの思想に基づいて、 プログラムの構成を確認。

  • MVCモデルは、 設計思想であり、基本を守って無理に当てはめる必要はない。