Javaでの開発で使われる用語の1つに「サーブレット」という言葉があります。
Javaプログラマー以外の方には聞いたことはあっても詳細については知らないという方も多いのが「サーブレット」です。
本記事では、Javaサーブレットについて初心者プログラマーでも分かりやすく、なるべく丁寧に解説していきたいと思います。
目次
Javaサーブレットとは?
Java Servlet(サーブレット)は簡単にいうと、サーバー上で動くJavaプログラムのことを指します。
概要
Javaサーブレットは、サーバーサイドのプログラムとして動的WEBページなどを作成するためのJavaプログラムです。
サーブレットを動かすための実行環境を「Webコンテナ」または「サーブレットコンテナ」と呼び、代表的な者には「Apache Tomcat」などが挙げられます。
サーブレット開発者は、コンテナ自体は既存で提供されているソフトウェアを利用し、コンテナ上で動くJavaプログラムの開発を行うことが一般的です。
Javaサーブレットの場合、Javaの特性がそのまま利用されているため、OSに依存することなくWindowsやMac、Linuxそれぞれの環境で動作させることが可能です。
Javaサーブレットを語る上で欠かせないJSPとは
Javaサーブレットを調べるとセットで紹介されている「JSP」という言葉があります。
基本的にはサーブレットもJSPもJavaアプリケーションを作成するために、サーバー上で動くプログラムであるため、同じような役割を担います。
一方でコードの記述方法と得意とする処理の内容が異なります。
まず、サーブレットはJavaプログラムの中でもサーバー側での様々な処理を行うために利用されることが多く、HTMLソースを返却することも出来るという特徴があります。
反対にJSPは、HTMLの中にJavaのコードを埋め込むことが可能で、主にフロントエンドの処理を記述し補助的な役割でJavaプログラムを実装する役割を持ちます。
JSPの魅力として、HTMLを読めるようなデザイナーやフロントエンドの開発者であれば、JSPコードも比較的簡単に扱えます。
フロントとサーバーでの役割を分担して作業を進める中で、簡単なJavaの実装をJSP側に記述してもらうなど効率的な実装が可能となります。
JavaサーブレットはJSPと一緒に利用しよう
JavaサーブレットとJSPはサーバー上で動作させるWebアプリケーション構築用のプログラムとご紹介してきましたが、どちらか一方だけでアプリケーションを作成するのではなく、両方の特性を活かすことでより効率的なシステム開発が可能となります。
なぜJavaサーブレットまたはJSPだけでシステムを作らないのか?
JavaサーブレットとJSPはどちらも単体で動的なWebアプリケーションを作成出来る機能を持ち合わせていますが、なぜわざわざ2つの異なる仕組みを用いてアプリケーション作成を行うのでしょうか?
結論としては、「チームでの作業が分割しやすくなる」ことや「単体で利用すると可読性が下がる」ことが要因となっています。
チームでの作業が分割しやすくなる
上述したように、JSPはHTMLの中にJavaコードを埋め込むことが出来るため、Javaを専業としないフロントエンドプログラマーやデザイナーの方でもちょっとした修正をしやすいのが特徴です。
JSPは「Webページ」を作成することに特化し、Javaサーブレットで本格的なサーバー処理を記述するようにすれば、チーム内での分業もスムーズに行えるため開発効率があがります。
単体で利用すると可読性が下がる
JavaサーブレットではHTMLを出力しようと思うと「println」メソッドを利用して、組み立てるHTMLの文字列を入力していく必要があります。
例えばプログラムのサンプルでお馴染みの「Hello World」をHTMLで出力しようと思うと
PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World Title</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>Hello World</p>"); out.println("</body>"); out.println("</html>");
最低でもこれくらいの記述量が必要になり、本格的なHTMLをサーブレット側で構築しようと思うとコーティング量も増え、非常に可読性が悪いと言えます。
Hello Worldと出力するだけであればもっと簡単に記述することも可能ですが、今回はHTMLを構成するということで上記のようにHTMLタグを文字列として入力しています。
JavaサーブレットとJSPを上手く組み合わせることで、それぞれの特徴を活かしてコーティング量も少なく、可読性の高いコードを作成することが可能となります。
Javaサーブレットの特徴とは?
Javaサーブレットの特徴として挙げられる2つの大きなメリットをご紹介しておきたいと思います。
マルチスレッド処理が可能
Webアプリケーションでは、クライアントからの要求をサーバー側で処理し返却する方法が一般的ですが、クライアントからの要求は1つずつ来るとは限らず、複数のクライアントから様々な要求が行われるのが普通です。
マルチスレッドに対応していない場合、1つ1つ処理を進めていくため順番待ちが発生し、非常に重たいアプリケーションが出来上がってしまいます。
サーブレットでは1つのサーブレットインスタンスに対して、クライアントからの複数処理要求を実行することが可能なため、効率の良い処理が実現可能です。
一方で、マルチスレッドで動くからこそ注意しなければならないコーティングのポイントも存在します。
最低でも「スレッドセーフ」になるようなプログラムを作らなくてはプログラムを制御することは出来ません。
スレッドセーフは、共有データに複数のスレッドからアクセスされないように安全性を確保する作りです。
サーブレットでの開発を担当する方はスレッドセーフについて必ず理解しておくようにしましょう。
サーブレットライフサイクルによるメモリ管理
サーブレットでは、インスタンスが作成されてから破棄されるまでの間、メモリ上にデータを保管するため、2回目以降の処理速度が早くなるという特徴を持っています。
一般的には処理が一度終わると使用したデータは破棄され、再度処理を行う場合には1からデータを読み込み直す必要があるため処理に時間が掛かってしまいます。
しかし、Webアプリケーションの場合には複数のクライアントから要求が頻繁に行われるため、共有出来るデータはメモリ上に保持し続け、無駄な読み込み処理を行わないような仕組みが作られています。
さいごに:Javaサーブレットを理解してWebシステムの仕組みを理解しよう!
本記事では、Javaサーブレットについて基本的な情報や周辺知識、実装する上で意識しておいてもらいたいポイントをご紹介してきました。
現在でもサーブレットとJSPを用いたWebアプリケーション開発は、Java開発において主流技術となっています。
Javaプログラマーはもちろん、これからWebアプリケーションを作成したいと考えている方も、サーブレットとJSPの仕組みを理解することでWebの仕組みを理解する手助けとなりますので、ぜひ一度サーブレットを活用したWebアプリケーション開発に挑戦してみてください。
この説明だけでは曖昧ですので順に解説していきたいと思います。