概要

関連用語が多くややこしいので疑問点を解消しつつまとめる。正しいのかわからない。

Java SE

Java Standard EditionをJava SEと略す。 Java言語自体と基本的なAPIなどの仕様とJavaの実行環境であるJVM(Java仮想マシン)をまとめたもの。 基本的なAPIにはStringクラスや標準入出力なども含まれる。

Java EE(Jakarta EE)

Java Enterprise EditionをJava EEと略す。 現在はOracleからEclipse Foundationにメンテナンスが引き継がれ、その際にJakarta EEに名称を変更した。

Java SEにアプリケーションサーバの仕様を追加拡張している。 例えばJava ServletもJava EEの仕様のひとつであるし、それ以外にもたくさんの仕様がある。

Java EEはあくまでも仕様でありそれらの実装は複数存在している。 GlassFishはJava EEの実装している。 TomcatはJava EEの一部の機能を実装している。

JDKとJRE

それぞれJDKはJava Development Kit、JREはJava Runtime Environmentを指す。 JDKはJavaの開発に必要なツールをまとめたもので、JREはJavaを実行するのに必要な環境をまとめたもの。 JDKの中にJREは含まれているため、JDKを用意すればJREを別途用意する必要はない。

JDKにはコンパイラであるjavacやその他デバッガや分析ツール等も用意されている。

JVM

Java Virtual Machineの略で日本語で言うならJava仮想マシン。 Javaをコンパイルしたコードを実行する。 JVMを用意すれば同じコードを異なるプラットフォームで実行することができる。

Java Servlet

JavaでWebアプリケーションを実装する際に必要なAPIである。 Java EEの持仕様の1つである。

Webコンテナ(Servletコンテナ)

Java EEのアプリを実行するためのソフトウェア。 上記で記載したTomcatとGlassFishもWebコンテナの一つである。

TomcatやGlassFishにJava EEの実装が含まれているため、 JDKでJavaアプリケーションをコンパイルする際にはServletの実装は含まれていない。 コンパイルしたコードにはAPIのインターフェースを使うことだけが記されている。 インターフェースとして統一されているので、TomcatでもGlassFishで動かすことができる。

Catalina

Apache Tomcatを構成する要素のひとつでサーブレットの実行などはCatalinaが担当している。

各種フレームワーク

フレームワークがいくつかあるがそれはJava Servletの機能を使ったうえで実行される。 JavaScriptで言うとNode.jsの上にExpressを導入する感じ?

  • Spring Framework
  • Struts
  • Jersey

ネットで調べるとJava EEもフレームワークの1つとして紹介されていることが多く混乱するが、 Java Sevletを直で触ることを意味している? Java EEの機能としてJSFやJAX-RSという仕様があるのでその実装をフレームワークとしている? そうするとJAX-RSを実装するJersey等を指しているのだろうか?

ビルドツール(Ant, Maven, Gradle)

Javaアプリケーションをビルドするためのツール。 ビルドのために依存関係の解決やインターネット上のリポジトリからダウンロードしてくれる。