JSPにおけるMVC(Archi構造)
⚡ スマートサマリー
JSP の MVC はアプリケーションの関心をモデル、ビュー、コントローラーのレイヤーに分離し、JSP がビューをレンダリングし、サーブレットがコントローラーとして機能し、 JavaBeansは、クリーンでテストしやすく、保守しやすいWebアプリケーションのためのモデルをカプセル化します。

MVCとは何ですか?
MVCはModel-View-Controllerの略です。これは、アプリケーションをビジネスロジック、プレゼンテーション、データの3つの相互接続されたレイヤーに分割するソフトウェア設計パターンです。MVCでは、
- M モデル
- V View の略
- C コントローラー
MVCは、ビュー層から処理の流れが始まる、体系的なアプリケーション構築手法です。ユーザーからのリクエストはコントローラー層で処理され、データの挿入または取得のためにモデル層に送信されます。モデルは成功または失敗のレスポンスを返し、ビューがそれをユーザーに表示します。MVCアーキテクチャの図を以下に示します。

MVCを使う理由 ArchiJSPにおけるテクチュアとは?
ジャンプする前にping JSPにおけるMVCの仕組みを理解するには、開発者がこのパターンを採用する理由を理解することが重要です。単一のJSPページ内にビジネスロジック、データベース呼び出し、HTMLを混在させると、すぐに保守性の低いスパゲッティコードが生成されます。MVCは、それぞれの関心事を独自のレイヤーにすることで、この問題を解決します。
- Code 各ファイルが単一の役割しか持たないため、読みやすくなる。
- チームは、ビュー、コントローラー、モデルを競合することなく並行して作業できます。
- 単体テストは、JSPレンダリングには一切手を加えず、モデルを直接対象とします。
- Swapping JSONレスポンスや別のテンプレートエンジン用のJSPビューを作成するのは簡単です。
JSPにおけるMVCの仕組み
JSPベースのMVCアプリケーションでは、各レイヤーは特定の Java テクノロジー。JSP ファイルはビューをレンダリングし、サーブレットはコントローラーとして機能し、 JavaBeanはモデルをカプセル化します。以下のセクションでは、各レイヤーの役割について説明します。
モデルレイヤー
- これは、システムのビジネスロジックを含むデータ層です。
- これは、アプリケーションのすべてのデータで構成されています。
- これはアプリケーションの状態も表します。
- それは JavaBeansまたはPOJOは、 データベース.
- コントローラーはモデルと通信してデータを取得し、それをビュー層に転送します。
- モデルはデータベースに接続し、データをデータベースに永続化します。
レイヤーの表示
- これはアプリケーションのプレゼンテーション層です。
- HTML、JSP、CSS、および Java脚本。
- 通常、アプリケーションのユーザーインターフェースを表示します。
- これは、コントローラーから取得したデータを表示します。コントローラーは、モデル層のクラスからデータを取得します。
- ビュー層は、ビジネスロジックを含まずに、アプリケーションのUI上にデータをレンダリングします。
コントローラ層
- これは、ビューとモデルの間のインターフェイスとして機能します。
- ビュー層から送られてくるすべてのリクエストを傍受します。
- ビュー層からリクエストを受け取り、処理し、リクエストの検証を行います。
- リクエストはデータ処理のためにモデル層に転送されます。リクエストが処理されると、モデルは必要な情報を含む結果をコントローラーに送り返し、ビューはその情報を表示します。
MVC の利点 Archi構造
MVC の利点は次のとおりです。
- 維持しやすい
- 拡張が簡単
- テストが簡単
- ナビゲーション制御は一元化されています
- レイヤー間の結合度が低いほど、リファクタリングが安全になる
- 複数のチームメンバーによる並行開発が可能
MVCを使用したJSPアプリケーションの設計例 Archi構造
この例では、JSPアプリケーションでMVCアーキテクチャを使用する方法を示します。
- ここでは、ビュー層を表す「email」と「password」という2つの変数を持つフォームを例にとります。
- ユーザーがメールアドレスとパスワードを入力して「送信」をクリックすると、アクションはMvc_servletに渡され、そこでメールアドレスとパスワードが渡されます。
- Mvc_servletはコントローラー層です。Mvc_servletでは、リクエストはモデル層として機能するBeanオブジェクトに送信されます。
- メールアドレスとパスワードの値はBeanに設定され、後で使用するために保存されます。
- Beanから値が取得され、ビューレイヤーに表示されます。
Mvc_example.jsp (ビュー)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>MVC Guru Example</title> </head> <body> <form action="Mvc_servlet" method="POST"> Email: <input type="text" name="email"> <br /> Password: <input type="text" name="password" /> <input type="submit" value="Submit" /> </form> </body> </html>
コードの説明:
レイヤーを表示:
Code 10〜15行目: ここでは、「email」と「password」という2つのフィールドをパラメータとして持つフォームを取り上げ、このリクエストをaction属性で渡されるコントローラMvc_servlet.javaに転送する必要があります。転送に使用されるHTTPメソッドはPOSTです。
Mvc_servlet.java(コントローラー)
package demotest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Mvc_servlet */ public class Mvc_servlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Mvc_servlet() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String email=request.getParameter("email"); String password=request.getParameter("password"); TestBean testobj = new TestBean(); testobj.setEmail(email); testobj.setPassword(password); request.setAttribute("gurubean",testobj); RequestDispatcher rd=request.getRequestDispatcher("mvc_success.jsp"); rd.forward(request, response); } }
コードの説明:
コントローラー層:
Code ライン14: Mvc_servlet は HttpServlet を継承しています。
Code ライン26: 使用されているメソッドは POST なので、リクエストはサーブレットの doPost メソッドに入り、リクエストが処理されて、testobj という名前で bean オブジェクトに保存されます。
Code ライン34: リクエストオブジェクトを使用して、「gurubean」という属性を設定し、その属性にtestobjの値を割り当てます。
Code ライン35: ここでは、RequestDispatcher オブジェクトを使用して、成功メッセージを mvc_success.jsp に転送しています。
TestBean.java(モデル)
package demotest; import java.io.Serializable; public class TestBean implements Serializable{ public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String email="null"; private String password="null"; }
コードの説明:
モデルレイヤー:
Code 7〜17行目: これは、TestBeanクラスのメンバーであるメールアドレスとパスワードのゲッターとセッターを含んでいます。
Code 19〜20行目: これは、Beanクラス内でString型のメンバーのメールアドレスとパスワードを定義します。
Mvc_success.jsp(結果表示)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="demotest.TestBean"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Success</title> </head> <body> <% TestBean testguru=(TestBean)request.getAttribute("gurubean"); out.print("Welcome, "+testguru.getEmail()); %> </body> </html>
コードの説明:
Code ライン12: サーブレットのdoPostメソッドで設定されたリクエストオブジェクトを使用して、属性を取得しています。
Code ライン13: Beanオブジェクトに保存されているウェルカムメッセージとメールアドレスを印刷しています。
出力
上記のコードを実行すると、次の出力が得られます。
mvc_example.jspを開くと、メールアドレスとパスワードの入力欄、そして送信ボタンが表示されたフォームが表示されます。
フォームにメールアドレスとパスワードを入力して「送信」をクリックすると、次のようになります。
「送信」をクリックすると、以下のような出力が表示されます。
画面上でメールアドレスとパスワードを入力して「送信」をクリックすると、その情報がTestBeanに保存されます。次の画面では、TestBeanからこれらの情報が取得され、成功メッセージが表示されます。 JSP データの表示とビューの提供の役割を果たす一方、サーブレットはコントローラーとして機能し、 JavaBeanはモデルとして機能します。主要なビジネスロジックはモデル層に含まれています。


