Servlet&JSPコンテナとしてのTomcat,Spring MVC,Springbootの関係。

備忘録的ですが、上記の関係に関して、纏めてみます。分かりやすくする為に、技術の細部を多少、端折っております。イメージを掴んでもらえれば！と思います。

＜前提＞
Web Applicationサーバ構築をするとします。
構築方法は色々とあるし、Webアプリケーションサーバも何種類かあるが、サーバサイドをJavaで開発したい場合、よく混同するTomcat,Spring MVC,Springbootの違いと関係に関して、纏めてみた。

1
最初に整理しないといけないのは、WebサーバとWebアプリケーションの違い。
その説明だけど、下記は非常に端的だと思います。

https://kanda-it-school-kensyu.com/java-jsp-servlet-contents/jjs_ch01/jjs_0103/

>Webサーバとアプリケーションサーバの違い
Webサーバは、HTMLファイル(静的なページ)をWebブラウザに返すサーバのことを指します。アプリケーションサーバは、プログラムを実行する環境を持ったWebサーバのことを指します。サーブレットやJSPを使った動的なページをWebブラウザに返したい場合は、プログラムの実行環境を持ったアプリケーションサーバが必要です。

2
尚、このWeb Applicationサーバであるが、開発言語に何を使うか？ によって、選択が異なる。
例えば、Javaを利用するアプリケーションサーバーならば、tomcat。PHPならば、Apach。Rubyならば、Unicornを選択する。
ちなみに、Java,PHP,Rubyをアプリケーションサーバ開発で使う言語という意味で、サーバサイド言語と言う。

https://anken-hyouban.com/blog/2020/01/12/application-server/

>アプリケーションサーバーとはWebサーバーより受け取った情報を処理するためのものです。WebサーバーからのリクエストをJavaやPHPなどのサーバサイド言語などで作成されたアプリケーションを実行して動的なコンテンツの生成をします。その際にデータベースが所持する固有のデータを必要とする場合にはデータベースサーバーへリクエストを行い、受け取ったデータを加工して動的コンテンツに埋め込みます。アプリケーションサーバーの代表的な種類としてTomcat(Java)、Apache(PHP)、Unicorn(Ruby)などが挙げられます。

3
でもって、世の中には、複数のWebアプリケーションサーバがある。
それぞれ一長一短がある様だが、世界的に広く使われているのが、Jakarta EE（旧Java EE)仕様に準拠しているTomcat。
オープンソースなので、無料で利用可能。尚、Jakarta EE対応だから、Java SE（Standard　Edition）に被せて使う必要がある。（Java SEは、OpenJDKでも提供されているから、OpenJDKに、Tomcatを被せれば、完全無料で使用できる。）

また、Tomcatは、JSPとかJavaサーブレット技術を駆使するWebアプリケーションサーバだから、JavaサーブレットコンテナとかJSPコンテナとも言われる。

https://magazine.techacademy.jp/magazine/17507

>TomcatはサーブレットやJSPを実行することができるオープンソースのサーブレットコンテナです。
サーブレットとは、Webサーバ上でWebページを動的に生成したり、データを処理したりするための、Javaプログラムです。サーブレットコンテナとはサーブレットを実行するためのソフトウェアです。

4
Tomcatを設定するためには、Java SEが動作している環境で、Tomcatをインストールすれば使える様になる。（繰り返しだが、Tomcatには、Jakarta　EEが内包されているので。）ただ、Tomcat設定には、MVCモデルを理解する必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/a53c29ca-f9b1-d5d5-209b-b7da507a61e0.png)

https://kanda-it-school-kensyu.com/java-jsp-servlet-contents/jjs_ch01/jjs_0104/

>TomcatはApache Software Foundationで開発されたオープンソースのアプリケーションサーバです。TomcatはWebサーバを内部に持っているので、Tomcat単体でサーブレット/JSPを実行することができます。

５　Tomcatの実際の設定方法。
ただ、実際にTomcatを利用して、Webアプリケーションを構築しようとすると、設定が大変。

MacにTomcatをインストールする方法と簡単な使い方

https://blanche-toile.com/web/mac-tomcat

Tomcatで最も簡単なプログラムを動かす

https://searchman.info/java_eclipse/1040.html

6 代案としてのSpring MVC

Tomcatを駆使する上記の方法が非常に複雑で大変なので、代案として、「Springフレームワークの一部であるSpring MVCを使って、Webアプリケーションを実装する。」というのが、一時期、流行った。
Spring MVCというのは、Spring Appを利用したWeb　Applicationサーバのこと。
Spring　MVCは、JavaのサーブレットやJSPの技術を駆使しているので、ServletやJSPのコンテナであるTomcatと一緒に利用される事が殆どと言って良いと思う。
ただ、そもそも、Springフレームワーク自体が、機能が豊富すぎることもあり、設定があまりにも煩雑という問題が長らく言われていた。
（細かい話だが、Spring MVCで使用されるMVCはFront Controllerパターンというタイプに分類され、上述のMVCモデルとは若干異なる。下図のように中央のFront　Controllerがすべてのリクエストを一旦受けとって処理の中継をすることで、ユーザーからのリクエストを適切なコントローラに引き継いでいる。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/e16b6beb-bd8e-f64e-d013-2cadef55ae92.png)

https://camp.trainocate.co.jp/magazine/spring-mvc/
>Spring MVCはSpring Project群に備わっている様々な機能を組み合わせたり、サードパーティーのライブラリを利用したりすることで、細やかな仕様変更や多様な開発プロジェクトに柔軟に対応できる非常に便利なフレームワークです。一方で、この特徴である拡張性・多様性から提供される機能は非常に多く、Spring Projects全体を把握して最適な解を選び出すことを難しくしています。また、プロジェクトの初期設定・環境構築がPHPやRuby等多言語と比べると複雑であり、チーム開発・個人開発どちらの場合でも準備に手間と時間がかかる習得難易度は高いフレームワークともいえます。

と言うか、それ以前に、Tomcat設定で必須となるxmlファイルコンフィグ自体が煩雑すぎて、 「xml地獄」から逃れられなかったと言う根本問題があった。　

「xml地獄」の説明。

>ある程度規模の大きなアプリケーション開発になると，開発者は下手をすると，肝心のロジックをコーディングしている時間より，何百行もあるXMLファイルの記述に追われている時間のほうが長くなる。それは開発者のモチベーションを下げることになり，全体の開発効率が下がる──この悪循環を木村氏はXML地獄と呼ぶ。Springによる開発に限らず，XML定義の煩雑さは，経験したことがある者なら理解できるだろう。

https://xtech.nikkei.com/it/article/COLUMN/20071011/284276/#:~:text=%E3%81%82%E3%82%8B%E7%A8%8B%E5%BA%A6%E8%A6%8F%E6%A8%A1%E3%81%AE%E5%A4%A7%E3%81%8D%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3,%E3%81%AFXML%E5%9C%B0%E7%8D%84%E3%81%A8%E5%91%BC%E3%81%B6%E3%80%82

Spring MVCも、Tomcatと使われる事が殆どだから、xmlを多用する事になり、非常に設定が煩雑となる弱点があった。
要は、開発効率を下げる諸悪の根源は、"xml地獄"にある訳で、Tomcatで構築しようと、Spring　MVCで構築しようが、ここは避けられない。

7 Springbootフレームワークとは

でもって、煩雑なSpringフレームを簡単に使える様にしたのが、Springbootフレームワーク。（要は、フレームワークの中のフレームワークがSpringbootフレームワーク。）
しかも、Springbootでは、xml設定をほぼ排除している。（自動で書いてくれるので、ユーザーはxml設定を意識しないで良い。）

https://camp.trainocate.co.jp/magazine/spring-mvc/

>Spring BootはこれらのSpring MVCの難点を解消してくれるフレームワークで、実際に触ってみるとJava初心者向けで比較的フレンドリーであることがすぐに分かるはずです。プロジェクト開始時にWebアプリの構築に必要な設定やSpringパッケージが予めデフォルトで設定されており、最低限の選択を行うだけで一般的なアプリに必要な環境構築ができます。またアプリケーションの内部に組み込みのアプリケーション・サーバー(Tomcat)を内包しているためサーバーの構築も不要です。

また、JSPを使わずに、テンプレートエンジンとしては、Thymeleafを利用。

https://www.nttdata.com/jp/ja/data-insight/2019/0805/

>JavaでのWebアプリケーションにおける画面の実装には、これまでJSPが多く用いられてきた。 近年、JSPの代わりにテンプレートエンジンを活用して画面設計を行う事例が増えて来ている。本記事ではSpring Bootで推奨されているテンプレートエンジンの一つ、Thymeleafについて紹介する。

8 Springbootフレームワークを使ったWeb Applicationサーバの構築

Tomcatを明示的にインストールする必要もなく（Springbootに内包されるので）、xml設定も不要なので、極めて高速にWeb Applicationサーバを構築する事ができる。
テンプレートエンジンも、JSPではより直感的に操作可能なThymeleafを利用しているので、Webアプリケーションサーバの構築は極めて簡単。
JDKのみが設定されていれば、Spring Initializerを駆使してすぐに構築可能。

https://start.spring.io/

こちらが、実際の構築手順。

https://qiita.com/naiveprince0507/items/24a80b89c5e39ad9f6c7

以上