
servletでアプリケーション開発!OSに依存しないJavaのメリット
servletとは?
servletとはJavaを使ってサーバーサイドプログラムを作成するための技術です。servletクラスと呼ばれる特別なクラスを開発することによりWebアプリケーションサーバー上でプログラムが実行できるようになります。
通常、Webサーバーはプログラムを実行する機能は持ち合わせていません。HTTPを使ってブラウザと通信する機能だけです。HTMLファイルで書かれたホームページが良い例です。しかし、プログラム実行環境を持ったWebアプリケーションサーバーを用意して、servletでプログラムを準備すればブラウザのリクエストに対してサーバーサイドから結果を返すことが可能になります。
servletクラスを実行するプログラム実行環境ソフトをservletコンテナと呼びますが、これは大抵、Webアプリケーションサーバーに備わっています。TomcatやWeblogicのようなサーバーにはちゃんとservletコンテナが存在します。
servletの特徴
servletがサーバーサイドプログラム関連の技術であること、servletコンテナが存在するWebアプリケーションサーバーを用意すればブラウザからのリクエスト要求に答えられることをなんとなく理解して頂けたかと思います。これができるとブラウザ側からデータベースに登録されている情報を閲覧、更新できるようになるため、データベース連携の大規模なサイト開発が可能になります。
どこでも動く
JavaはOSに依存せずに動きます。一般的にはOS毎に動く言語は異なりますが、JavaはコンパイルされるとOSに依存しないJava特有のファイルに変換されます。このファイルはほぼすべてのOSに対応しているため、どのOS上でも不自由なく動きます。servletもJavaなので、WindowでもLinuxでも問題なく動くことからとても汎用性が高い技術と言えます。
マルチスレッド対応
Javaは複数のスレッド(マルチスレッド)を同時に実行できる言語です。通常、CPUは1つの処理しかできず、その処理が終わったら次の処理が実行されます。しかしマルチスレッドでは、複数の処理を短時間で切り替えて並行処理するため、プログラムの実行速度改善が期待できます。servletもJavaなので、もちろんマルチスレッドに対応しています。
servletクラス作成のルール
servletクラスをゼロの状態から作ることも可能ですが、とても非効率です。基本的には以下のルールを実行した後に必要なクラス、メソッドを作っていきます。
1.servlet関連のクラスをインポート
servletクラスを開発するためには最低限のservlet関連クラスをインポートする必要があります。その関連クラスはjavax.servletとjavax.servlet.httpパッケージの中に入っています。以下がその関連クラスです。
・java.io.IOException;
・javax.servlet.ServletException;
・javax.servlet.http.HttpServlet;
・javax.servlet.http.HttpServletRequest;
・javax.servlet.http.HttpServletResponse;
この5つをインポートしてください。
2.javax.servlet.http.HttpServletクラスの継承
HttpServletクラスは、servletクラスの親分みたいなものでこのクラスを継承しておけば、すぐさまservlet開発ができます。もし、継承しないとservletクラスを最初から作らなければなりません。このHttpServletクラスにはservlet開発に重要な多くのメソッドが定義されています。
3.doGet()メソッドのオーバーライド
このdoGet()メソッドはHttpServletクラスに定義されているメソッドなのですが、このdoGet()メソッドをオーバーライドしておく必要があります。servletクラスがリクエストされるとまずはdoGet()メソッドからプログラムが実行されるので、ここから動き出すプログラムを書く必要があります。ここでdoGet()メソッドの中身を見てみましょう。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
}
特に引数に注目していただきたいのですが、1つ目の引数であるHttpServletRequestインスタンスはブラウザから渡されたリクエスト情報です。
ブラウザで入力した言葉や数値がこのHttpServletRequestインスタンスを通してサーバーサイドのservletに渡り、サーバーサイドで処理されます。もう1つのHttpServletResponseはサーバーから返す情報に関連する情報を持っていて、サーバーサイドで処理した結果はこのHttpServletResponseインスタンスを通して情報が返されます。ブラウザとの情報連携はこの2つのインスタンスでほぼ対応できます。以上のことからもブラウザ情報連携ではこのdoGetメソッドがとても重要になります。
これら3つがservletクラスを作成するための必要最小ルールになります。このルールを守っておくとservlet開発が随分と楽になります。
servletクラス実行
では次に完成したservletクラスがどうやって実行されるのかを紹介します。servletクラスを実行する時にはJavaファイルと同様にコンパイルとインスタンス化が必要です。servletクラスをコマンドでコンパイルする場合はクラスライブラリのservlet-api.jarとjsp-api.jarへクラスパスを通しておく必要があります。あとはJavaファイルと同様に、
Javac servletファイル名
でコンパイルできます。Eclipseを使う場合は、「上書き保存」でEclipseが自動でコンパイルしてくれます。
インスタンスに関してはservletの場合、リクエストするとアプリケーションサーバー(具体的にはservletコンテナ)が自動的にインスタンスを生み出してくれますし、アプリケーションが終了するとservletクラスのインスタンスはアプリケーションサーバーによって自動的に破棄されますのでインスタンス化でプログラマーが行う作業はありません。
ちなみにアプリケーションサーバーにとっては、インスタンスの生成と破棄はとてもパワーを使う作業です。そのため一度インスタンス化されてメモリ上に展開したら、アプリケーション終了までインスタンスは残ります。
似たような仕組みで動くCGIという技術の場合は、リクエストの度に生成と破棄を繰り返しますが、servletはしばらくそのままです。そのため1回目のリクエスト時はインスタンス生成をするため応答に時間がかかりますが、2回目以降はアプリケーションを終了しない限り、1回目のインスタンスが再利用されるので、応答が早くなります。
決まったタイミングで呼ぶinit()メソッド
servletを実行するとインスタンスが生成された直後にスーパークラスのinit()が実行されます。そのためinit()メソッドには、初期化処理を記述することが多いです。
決まったタイミングで呼ぶDestroy()メソッド
Destroy()メソッドはinit()メソッドとは逆でアプリケーションが終了する直前に決まって呼び出されるため、データベース切断などシステム終了の後処理を記述します。
doGet()メソッドなどはinit()メソッドとDestroy()メソッドの間で実行されます。
servletの相棒!JSP
servletはJSP(Java Server Page)と組み合わせることでもっと使いやすくなります。
JSPはservletと同様、サーバーサイドプログラムですが、HTML内に記述して使います。servletクラスでできる動きはJSPファイル上でもできますが、servletとJSPを用いたシステム開発では、サーバーサイド側はservletで記述し、画面側はJSPで記述するパターンが一般的です。
画面の部分と画面遷移を分離することもできるため開発する技術者にとっても分けて開発した方が何かと好都合です。
便利なフレームワークも
フレームワークを使うと開発期間を短縮できます。フレームワークを使うとすべてガリガリ書いていたコードをかなり省略できます。開発の現場では、工数と予算が合わないことがよくあるので、開発期間は短いに越したことはないのです。
Javaフレームワークで最も歴史のあるものと言えばStrutsです。Strutsは独自のカスタムタグやXmlファイルによる画面遷移の簡略化がうけて、人気を博したフレームワークですが、脆弱性も多く発見されているため、他のフレームワークに移るユーザーも散見されます。
ただStrutsの進化形であるStruts2では脆弱性に対する改善がなされているようです。他にはSpringやseasarなどが代表的なフレームワークです。
servletのまとめ
servletはJava言語を使っているため、非常に使い勝手が良い技術です。OSには依存しませんし、APIが充実しているため、実行したい仕組みはAPIでほとんどまかなえます。またJavaには使いやすいフレームワークがいくつも公表されているため、開発するための環境は十分整っています。大規模なWebアプリケーションを開発する際はぜひservlet(+JSP)を試してみて下さい。
PR:エスキュービズムのインテグレーション事業
エスキュービズムは「ハードウェア」「ソフトウェア」「デジタル」「リアル」という21世紀で求められるビジネスプラットフォームを構築してきました。
こうした「エスキュービズムプラットフォーム」を活用し、 モノ IT、リアル デジタルなどあらゆる垣根を融合していくことで、 業界や企業の課題解決へ導きます。