Javaによるプログラミングに関する世界観(B.サーブレット)です。Javaの世界観1(言語)も参照のこと。
Javaサーブレットとは、サーバー側で動作しHTMLを吐き出す、CGIやPHPと同様のJavaによる技術。
Apacheのようなサーバーソフトウェアと、Tomcatのようなサーブレットコンテナ(アプリケーションサーバー)を使って構築する。
Perl/CGIやPHPと異なる点は、プログラミング言語がJavaであり、静的型付けの言語で使えるということや、IBMなどがメインフレームでもWebSphereなどをサポートしており、「高度なインフラシステムとしても利用できる」という点がある。
多くの場合PHPやWebフレームワーク技術のあるRubyなどで作られることの多いWebサーバーサイド技術だが、「Javaでもいける」という点では優れている。Javaの優れたクラスライブラリを使うことができ、JavaVMの高パフォーマンスでクロスプラットフォームな仮想マシンを使うこともできる。特にJSPを使うことで、PHPと同様にHTMLの中にJavaコードを埋め込むことができる。
ちなみに、ブラウザ上でプラグインによって動くJavaアプレットとは本質的に異なる技術であるため、混同しないように注意しよう。
アプリケーションサーバやCGIも参照のこと。
現在、商用のエンタープライズシステムでは、サーバを三層構造にして、Webサーバ、APサーバ、DBサーバの三階層システムにし、Webブラウザを端末とすることが一般的です。
こうすることで、どのようなシステムであっても、基本的に対応可能です。
このうち、WebサーバはApacheやNginxを用いることが多く、DBサーバにはSQLを用いたリレーショナルデータベース管理システムを使うことが多いですが、この2つを繋ぐAPサーバにおいて標準的なのがJavaサーブレットです。
APサーバは、システムにおける「ロジック」すなわちプログラミングによって可能となる領域を担当します。なぜJavaを使うのかは、静的型付けでありながらオブジェクト指向プログラミングを行うJavaが、低水準のC/C++に比べて便利で書きやすく、LL系言語であるRubyなどに比べて大規模なプロジェクトにも用いることができるぐらいしっかりとしており、またクラスライブラリが整っているため簡単にシステムを構築できるからです。
Javaのライバルは、Microsoftによる.NETでしょう。実際、商用システムを作る上で、三階層型のサーバを使わない場合、Windowsプラットフォームであれば.NETを用いることもあります。理由は、Microsoftであるため、VBなどを用いればネイティブなGUIが実現でき、クラスライブラリがJavaと同様に整っているからです。このような場合、ネットワーク通信をどうするのかが課題になります。しかしながら、多くの場合HTTP通信を用いることで解決できます。
クラスタ・分散・高信頼システムも参照のこと。
サーバーでJavaを動かすJavaサーブレットと、PHPのようにHTMLに埋め込むことの出来るJSP。
以下にサンプルコードがある。
HTTP通信を行うサーブレットは、「HttpServlet」クラスを継承して作成する。
JSPでは、基本的に、
<% ~ %>
でJavaコードを埋め込める。
また、
<%= ~ %>
とすれば式をそのまま出力できる。さらに詳細は以下を参照のこと。
HttpServletでは、GETリクエストでページにアクセスが来た時はdoGet()、POSTリクエストでデータを受け取った時はdoPost()で処理を行う。
WARファイルは、Webアプリケーション向けのJavaアプリケーションの圧縮形式。
Javaアプリケーションの圧縮形式にはJAR、WAR、EARの三種類があり、JARがスタンドアロンのJavaアプリケーション向け、WARがサーブレットを使ったWebアプリケーション向け、EARがエンタープライズ向けのJARとWARの複合、という圧縮形式となる。
JARは単なるZIP形式であるため、圧縮解凍ソフトで簡単に展開できる。
アプリケーションサーバを参照のこと。
JavaBeansを参照のこと。
Javaサーブレットは、クロスプラットフォームなJavaの「バイトコード」の特徴を活かしている。
CGIプログラムは、C言語で書くこともできる。だが、この場合、再コンパイルしなければ動かない。サーバーマシンでわざわざ再コンパイルするのは、難しい。
サーバープログラムに、PerlやPHPなどを用いると、スクリプトをアップロードすることで動くため、コンパイルしなくても良い。だが、この場合、C/C++よりも実行速度が遅くなる。
ここで出てくるのが、Javaサーブレットである。Javaはバイトコードでコンパイルされると同時にクロスプラットフォームなため、サーバーでできるだけ速度を犠牲にせず、その上でローカル環境で開発することができる。
Javaサーブレットはサーバー開発のある意味での理想である。
移植性も参照のこと。
以下を見ると分かるように、Java EEによるアプリケーションサーバ(Javaサーブレットコンテナ)は、コンテナ型の仮想化と良く似ている。
OS + Java + Tomcatの上でWARアプリケーションが動くこの図式は、Linux + Dockerの上でDockerイメージが動く図式の元になったものであると言える。Java EEとTomcatを簡単な仮想化システムとして活用することができる(ただしJava言語とWebに限った場合のみ)。
Dockerも参照のこと。
2023.09.29編集
Javaをアプリケーションサーバで動かす。
3階層型システムのWebサーバ、APサーバ、DBサーバで言えばAPサーバ。
エンタープライズ開発ではJavaサーブレットは非常に普及している。
単なるPHPの代替としても使える。
JSP/Servlet