【Java】Controller の概念( MVCモデル )

<!-- タイトルを記述 -->
# Controller 

<!--  記事全体の内容の一言まとめ -->
## 一言まとめ
「$ServletのようなViewとModelを制御する機能$ 」

<!--  上記の詳しい説明 -->
## 【説明】

コントローラは、ViewとModelを制御します
MVCモデルにおいてのControllerは、名前の通り「システムをコントロールする役割」役割の機能のことで、ViewやModelへの命令を担います

<!-- メリット「使うことのメリット」 -->
<!-- ## 【メリット】 -->


<!-- 特徴「特筆すべき所」 -->
## 【特徴】

Controllerは、自分自身でModelとViewの仕事である「ロジックの実行」や「画面の表示」は行わない。

Controllerの仕事は以下のように、「ModelとViewに仕事を割り当てる事」です。

1. Viewからリクエストを受け取る
2. Modelへ処理の命令を出す
3. Modelから処理の結果を受け取る
4. Viewへレスポンスを返す

JavaEEではControllerはWeb層とEJB層の2つに分かれており、以下のような流れで処理が行われる

1. Web層でViewからの入力を受け付けて、Webに依存しない形式に変換
2. その情報をEJB層に送信
3. EJB層は送信された内容に応じて、必要なロジックが実装されたModel（EJB）に処理を依頼
4. 処理結果はEJB層からWeb層へフィードバックされる
5. Web層がView（JSP）に表示処理を依頼
6. クライアントへ結果が送信される

### 【補足】EJB（Enterprise JavaBeans）
結論、ModelやJavaのクラスのことを指す。
EJBとは、Java言語の企業システム向け拡張仕様Java EE（Enterprise Edition）の一部で、サーバ上で動作するアプリケーションをソフトウェア部品（コンポーネント）を組み合わせて開発・実行できるようにするもの。

<!-- 使用場面 「いつつかうか？」「どこで、つかうか？」-->

## 【使用場面】
一例は以下です。

- サーブレットクラス
- 要求の受け取り
- 処理実行依頼(Model)
- 結果表示依頼(View)
- (Rest Controller)ユーザからリクエスト受けModelに処理を依頼する機能

<!-- 使用方法「どう使うか？」「どうやって使うか？」-->
<!-- ## 【使用方法】 -->





<!-- ここから 各キャプチャー↓↓↓↓↓↓↓↓↓↓↓↓↓↓ -->
<!-- サンプルコード、サブセクションを記述↓↓↓↓↓ -->




<!-- サンプルコードや、サブセクションを記述↑↑↑↑↑ -->
<!-- ここまで 各キャプチャー↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ -->

<!-- 今後どうするかなどを有れば記述 -->
## 【まとめ】
とりあえず概念についてはイメージが付いてきたので、実際にコードを書いて落とし込んでいきたい。

<!-- 参考にした資料のリンクを貼る -->
## 参考文献・記事

- [JavaにおけるMVCモデルとは？MVCモデルの3つの役割を紹介](https://www.fenet.jp/infla/column/technology/java%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bmvc%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF%EF%BC%9Fmvc%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE3%E3%81%A4%E3%81%AE%E5%BD%B9%E5%89%B2%E3%82%92%E7%B4%B9%E4%BB%8B/)
- [MVCモデルとは何ですか・・](https://www.atmarkit.co.jp/fjava/javafaq/j2ee/j2e07.html)
- [MVCモデル2によるWebアプリケーション](https://www.wakhok.ac.jp/~tomoharu/web2004/text/index_c10.html)
- [https://www.slideshare.net/MugeSo/mvc-14469802](https://www.slideshare.net/MugeSo/mvc-14469802)
- [スクリプトレットを使ってJSPにJavaのコードを埋め込む](https://code-examples-ja.hateblo.jp/entry/2015/10/22/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%AC%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6JSP%E3%81%ABJava%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC#:~:text=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%AC%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF%E3%80%81JSP,%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80%E3%81%9F%E3%82%81%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%80%82&text=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E5%BC%8F%E3%81%A8%E3%81%AF%E3%80%81%E5%A4%89%E6%95%B0,%E5%87%BA%E5%8A%9B%E3%81%95%E3%82%8C%E3%82%8B%E5%86%85%E5%AE%B9%E3%81%BE%E3%81%A8%E3%82%81%E3%80%82&text=page%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%81%AB%E3%81%AF%E4%BB%A5%E4%B8%8B,%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82)
- [EJB](http://e-words.jp/w/EJB.html#:~:text=EJB%E3%81%A8%E3%81%AF%E3%80%81Java%E8%A8%80%E8%AA%9E,%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%82%82%E3%81%AE%E3%80%82)


<!-- 以下ショートリンク↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ -->
[Progate]:https://prog-8.com/
[ドットインストール]:https://dotinstall.com/
<!-- A -->
[abstract修飾子]:https://qiita.com/takahirocook/items/9fa0e1cbb8a4dd4e1ff4
[abstract]:https://qiita.com/takahirocook/items/9fa0e1cbb8a4dd4e1ff4
<!-- B -->
<!-- C -->
[Calendar]:https://qiita.com/takahirocook/items/204dd7331db777eb6f3b
<!-- D -->
[Date]:https://qiita.com/takahirocook/items/a760e20ef2d9aa5c08fc
<!-- E -->
<!-- F -->
[final]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[final修飾子]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
<!-- G -->
[getter・setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[getter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[GET]:https://qiita.com/takahirocook/items/8080a478439f6043b2c1
[GETメソッド]:https://qiita.com/takahirocook/items/8080a478439f6043b2c1
[getParameter()]:https://qiita.com/takahirocook/items/8080a478439f6043b2c1
[getParameter]:https://qiita.com/takahirocook/items/8080a478439f6043b2c1
[getParameterメソッド]:(https://qiita.com/takahirocook/items/8080a478439f6043b2c1)
[getParameterValues]:https://qiita.com/takahirocook/items/7a071493ae73cc4749e1
[getParameterValuesメソッド]:https://qiita.com/takahirocook/items/7a071493ae73cc4749e1
<!-- H -->
<!-- I -->
[import]:https://qiita.com/takahirocook/items/59a8a09cab6a98d3bca2
<!-- J -->
[JDBC]:https://qiita.com/takahirocook/items/064b591cffa4221144ed
<!-- K -->
<!-- L -->
[List]:https://qiita.com/takahirocook/items/4d622fc6f271569783b5
[length]:https://qiita.com/takahirocook/items/16a123fb73b30869053b
[list]:https://qiita.com/takahirocook/items/4d622fc6f271569783b5
<!-- M -->
[Map]:https://qiita.com/takahirocook/items/49f46151ecb5e332db32
[map]:https://qiita.com/takahirocook/items/49f46151ecb5e332db32
[mainメソッド]:https://qiita.com/takahirocook/items/f4635915337303de338c
<!-- N -->
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[new]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
<!-- O -->
<!-- P -->
[printf()メソッド]:https://qiita.com/takahirocook/items/06d525be63eccd99ed49
[printf()関数]:https://qiita.com/takahirocook/items/06d525be63eccd99ed49
[POST]:https://qiita.com/takahirocook/items/7a071493ae73cc4749e1
[POSTメソッド]:https://qiita.com/takahirocook/items/7a071493ae73cc4749e1
<!-- Q -->
<!-- R -->
<!-- S -->
[static修飾子]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[static]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[SimpleDateFormat]:https://qiita.com/takahirocook/items/aa857c8f2153193095e4
[set]:https://qiita.com/takahirocook/items/d498329cd26e1500f476
[Set]:https://qiita.com/takahirocook/items/d498329cd26e1500f476
[super]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
<!-- T -->
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[Time]:https://qiita.com/takahirocook/items/9caef0bb2409caedba55
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[web.xml]:https://qiita.com/takahirocook/items/d41a92bd36807d456f82
<!-- U -->
<!-- V -->
<!-- W -->
<!-- X -->
<!-- Y -->
<!-- Z -->
<!-- あ行 -->
[オブジェクト指向]:https://qiita.com/takahirocook/items/041ba7a096b71ab8ffd4
[継承]:https://qiita.com/takahirocook/items/6c84ea66a6e2ad536a37
[オーバーライド]:https://qiita.com/takahirocook/items/09dd8e5f56d6617ce45a
[オーバーロード]:https://qiita.com/takahirocook/items/b937c3c07126fe7e02a4
[インスタンス]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[インスタンス化]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インターフェイス]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[インターフェース]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[インポート]:https://qiita.com/takahirocook/items/59a8a09cab6a98d3bca2
[インデックス]:https://qiita.com/takahirocook/items/16a123fb73b30869053b
<!-- か行 -->
[拡張for文]:https://qiita.com/takahirocook/items/470b2858de1a4f99b334
[クラスメソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[カプセル化]:https://qiita.com/takahirocook/items/e469a7c0539a0012868e
[クラス]:https://qiita.com/takahirocook/items/50cbbdca8e21539170e9
[コンストラクタ]:https://qiita.com/takahirocook/items/fa1822f2f22c3786593e
<!-- さ行 -->
[サーブレット]:https://qiita.com/takahirocook/items/1ee780d68fd859e43daf
[書式指定子]:https://qiita.com/takahirocook/items/06d525be63eccd99ed49
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[スーパークラス]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
<!-- た行 -->
[定数]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[抽象クラス]:https://qiita.com/takahirocook/items/9fa0e1cbb8a4dd4e1ff4
[抽象メソッド]:https://qiita.com/takahirocook/items/9fa0e1cbb8a4dd4e1ff4
[動的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
<!-- な行 -->
[日時の文字列操作]:https://qiita.com/takahirocook/items/aa857c8f2153193095e4
<!-- は行 -->
[パッケージ]:https://qiita.com/takahirocook/items/39b58d17abcb159ef5c1
[引数]:https://qiita.com/takahirocook/items/5e5b0ba79e869f4a592e
[配列]:https://qiita.com/takahirocook/items/16a123fb73b30869053b
[配列操作]:https://qiita.com/takahirocook/items/16a123fb73b30869053b
[日付操作]:https://qiita.com/takahirocook/items/9caef0bb2409caedba55
[フィールド]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[インスタンスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
<!-- ま行 -->
[戻り値]:https://qiita.com/takahirocook/items/3b6fa670a1d6dd4a9386
[メソッド]:https://qiita.com/takahirocook/items/5bfe43576d87a2a4006c
[メソッドの呼び出し]:https://qiita.com/takahirocook/items/f4635915337303de338c
<!-- や行 -->
<!-- ら行 -->
<!-- わ行 -->