Nablarchを学ぶ前に知っておくべき知識について

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

今回は表題の通り、Nablarchを学ぶ前に知っておくべき前提の知識について整理します。

Nablarchの[技術ドキュメント](https://nablarch.github.io/docs/LATEST/doc/index.html)には難しい単語や技術が多く登場します。
Nablarch開発以前に一般的な知識を習得しておくことで、技術ドキュメントの理解も一層深まるもと思いますで、一読してみてください。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)から閲覧可能です。

なるべく、初心者目線で作成するつもりですが、分かりづらい部分ありましたら、コメント頂きたいです。

# 目次
* Webアプリケーションとは
* サーブレットとは
* JSP(Java Servlet Pages)とは
* warファイルとは
* JSRとは
* Java SEとJava EEについて
* DI(Dependency injection)について
※ 記事公開後も必要に応じて追加して行く予定です

# Webアプリケーションとは
一般的にはWebの仕組みを利用した上で動作するアプリケーションのことです。
ブラウザなどのクライアントソフトウェアの操作によりインターネット上のWebサーバーにて動作します。

ブラウザから操作をするユーザーにとっては、Webアプリケーションがどのような仕組みで動作しているかは意識しませんし、わからないケースがほとんです。

Webアプリケーションのシステム構成は様々で、開発言語においても、PHP,Perl,Ruby,Python,Go,Javaなど多くの言語が利用されています。

本記事のシリーズにおいては、サーブレットを利用したWebアプリケーションを対象としています。

### 参考リンク
* [【図解】WEBアプリケーションとは？仕組みと開発言語を解説！](https://www.kagoya.jp/howto/it-glossary/web/webapplication/)

# サーブレットとは
サーブレットはSun Microsystems社が開発した、サーバ上で動作するJavaプログラムです。 Servletの仕様書はSunが[公開](https://www.cresc.co.jp/tech/java/Servlet_Specifications/Servlet_Specification_3_0_Japanese.pdf)しています。

クライアントからブラウザなどの操作により、サーバーにリクエストを送ると、サーブレットが動作し、動的にページを生成しクライアントに返却します。

サーブレットはJavaプログラムのため、動作には実行環境が必要です。この実行環境となり得るソフトウェアをサーブレットコンテナと呼びます。
サーブレットコンテナはクライアントからリクエストを受け取ると、リクエストの内容によりサーブレットを呼び出し、サーブレットの結果をクライアントへ返却します。

代表的な、サーブレットコンテナにtomcatやjbossなどが存在します。

### 参考リンク
* [サーブレット](https://www.ibm.com/docs/ja/rsm/7.5.0?topic=servlets-)
* [サーブレット仕様書、第 3.0 最終版](https://www.cresc.co.jp/tech/java/Servlet_Specifications/Servlet_Specification_3_0_Japanese.pdf)

# JSP(Java Servlet Pages)とは
例えば、クライアント側で購入ボタンを押した場合、サーバーで購入処理を実施し、完了画面の情報をサーバーからクライアントへ返却します。
この完了画面の情報は基本的にはHTML形式となりますが、HTMLファイルは静的な（変更しない）ファイルのため、完了画面に購入した品物や金額を表示するようなことが苦手です。

そこで、JSPの登場です。
JSPファイルには、HTMLの記述の中にJavaのコードを埋め込むことが可能で、サーブレットの処理にてJSPファイルから動的にHTMLのデータを変更し、クライアントへ動的に変更された完了画面のHTMLデータを返却することができます。

### 参考リンク
* [サーブレット(Java Servlet)とは？【概要を5分で把握】](https://hnavi.co.jp/knowledge/blog/java-servlet/)

# warファイルとは
[サーブレット仕様書、第 3.0 最終版](https://www.cresc.co.jp/tech/java/Servlet_Specifications/Servlet_Specification_3_0_Japanese.pdf)には、サーブレットの動作とともに、ディレクトリ構造にも定義している。
この定義に従い、サーブレット・コンテナ(例えば、tomcat）は必要な設定ファイルやクラスファイルを読み込みます。

warファイルは <font color="red">W</font>eb application <font color="red">AR</font>chiveの略で、サーブレットのディレクトリ構造仕様に準拠する形で、zip化したファイルです。

warファイルはjarコマンドやmavenコマンド、eclipseのGUI操作などから生成可能です。

### 参考リンク
* [jarコマンドを使ってjarファイル、warファイルを作る方法](https://qiita.com/Qui/items/14961678ef939673f744)

# JSRとは
JSR(Java Specification Request）はJava仕様要求です。
チェックやテスト、投票などを通して承認されるとJavaの仕様となる。
WebサイトなでみるJSRは基本的には仕様と考えて良い。

なお、JSRの対象はJava SE、Java EE, Java MEです。

JSRについてもっと知りたい人は以下を参照してください。
[【Javaの仕様が決まるとき】JSRの歩き方(基本編)](https://yyyank.blogspot.com/2015/04/javajsr.html)
[JSRがJava標準になるまで--JCP Executive Committeeが来日](https://japan.zdnet.com/article/20087447/)

# Java SEとJava EEについて
## Java SE(Java Platform Standard Edition)
Javaで仕様されるAPIをまとめたもです。その中でも名前の通り基本的な機能をまとめたものになります。

実行環境やコンパイラバージョンなどで登場する8,11,17などはJavaSEのバージョンとなります。
本当なら、Java SE 8やJava SE 11などと記載すべきなのでしょうが、私の記事では大抵の場合、Java8やJava11と明記していると思います。

普段よく利用する、「java.lang.String」クラスもJava SEのAPIのひとつとして定義されているようです。

以下、オラクルのAPI仕様書の画像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/0003c7c6-14df-a21b-b9fd-fa0c1b0c8d33.png)

### 参考リンク
* [Java(tm) Platform, Standard Edition 8 API仕様](https://docs.oracle.com/javase/jp/8/docs/api/index.html)
* [Java のリリース日とEOLのまとめ](https://qiita.com/YujiSoftware/items/2f912af3c857e827ff95)
* [Java SEとJDK、JRE、JVMの違いに関する解説](https://www.javadrive.jp/start/install/index5.html)

## Java EE(Java Enterprise Edition)
企業向けのWebアプリケーション開発ができる機能がセットになったプラットフォームです。
Javaで実装されたアプリケーションサーバーの標準規格や、そのAPIを定めたもので、サーバーサイド起動などの機能が追加されています。

Java EEと記載しておりますが、Java EEはOracle社によって管理されていたが、「Eclipse Foundation」へ移管したことにより、「Jakarta EE」と名称が変更になっています。

最新バージョン(2022年４月現在）はJakarta EE Platform 9です。

### 参考リンク
* [【Java入門】Java EEとは？(WebProfile/Glassfish/JakartaEEも解説)](https://www.sejuku.net/blog/21417)
* [Java EEからJakarta EEへ](https://blogs.oracle.com/otnjp/post/transition-from-java-ee-to-jakarta-ee-ja)
* [Java EEとは？APIやJava SEとの違いなど徹底解説！](https://style.potepan.com/articles/16062.html#Java_EE)