サーブレットの公開の仕組み
話が少し脇道にそれてしまいましたが、再びサーブレットに戻りましょう。サーブレットのソースコードについては一通り理解できましたが、実はもう1つ知っておかなければならないことがあります。それは「サーブレットはどうやって公開されるのか」についてです。
JSPと違い、サーブレットはただのJavaクラスですから、そのままアクセスしても認識できません。Javaサーバに「このURLにアクセスされたら、このサーブレットのクラスを呼び出して処理してください」ということを教えておく必要があるのです。それを記述してあるのが、WEB-INF内にある「web.xml」というファイルです。
このファイルを開いてみましょう。WTPでは、専用のXMLeditorが用意されており、XMLの内容を階層的に整理して表示するようになっています。これはこれで便利ですが、今はソースコードを知りたいので、エディタ下部の「ソース」タブをクリックしてソースコードの表示に切り替えてください(「設計」タブをクリックすれば再び先ほどの画面に戻ります)。


<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>myweb</display-name> <servlet> <description>This is my first servlet.</description> <display-name>MyServlet</display-name> <servlet-name>MyServlet</servlet-name> <servlet-class>jp.codezine.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myserv</url-pattern> </servlet-mapping> ・・・中略・・・ </web-app>
見やすいように適時改行を修正してあります。このXMLファイルにサーブレットに関する情報を記述しておくと、Javaサーバはその内容を読み込んでサーブレットを認識します。では、このXMLソースコードは、どのような内容が書かれているのでしょうか。
サーブレットに関する情報は、<web-app>内の<servlet>タグと<servlet-mapping>タグで記述されます。この2つは常にセットで記述をします。これらの内容を整理すると次のようになります。
<servlet> <description>説明文</description> <display-name>サーブレットの表示名</display-name> <servlet-name>サーブレット名</servlet-name> <servlet-class>サーブレットのクラス</servlet-class> </servlet> <servlet-mapping> <servlet-name>サーブレット名</servlet-name> <url-pattern>割り付けるURL</url-pattern> </servlet-mapping>
サーブレットに関する情報は、<servlet>に記述をします。ここでは、主にサーブレットのクラスとサーブレット名を指定します。これにより、Javaサーバは指定の名前でサーブレットのクラスを認識するようになります。
サーブレットの公開に関する情報を記述するのが、<servlet-mapping>です。ここで指定した名前のサーブレットにURLを割り付けます。これにより、そのURLにアクセスしたら指定のサーブレットが実行されるようになります。
以上のことを理解したうえで、ここで作成されていた内容をよく見直してみてください。Webアプリケーション内の/myservというURLにアクセスすると、jp.codezine.MyServletクラスがサーブレットとして実行されるように定義されていることがよく分かりますね。
Webアプリケーションの公開について
では、最後にサーブレットをJavaサーバにアップするための方法について説明をしておきましょう。現在、サーブレットは普通に動いているはずですが、これはあくまで「WTPにそのための機能が組み込まれている」からです。実際にJavaサーバに公開をする場合には、考えなければいけないことがあります。それは「ファイルやフォルダの構成を変更しない」という点です。Webアプリケーションでは、次のような形でファイル/フォルダが構成されます。
+Webアプリケーションのディレクトリ
+--JSP、HTML、CSSなどのファイル類
+--WEB-INF
+--web.xml
+--classesフォルダ
+--サーブレットなどのクラスファイル
+--libフォルダ
+--ライブラリファイル
重要なのは「WEB-INF」フォルダです。このフォルダは、Javaサーバでは「中にアクセスできない不可侵領域」として扱われます。つまり、外部から「http://○○/WEB-INF/」などというようにして直接URLを指定してアクセスされても、このWEB-INF内にあるものは絶対に表示されないのです。「web.xml」のように重要な情報が記述されているファイルは、必ずこの「WEB-INF」内に配置をします。
このフォルダ構成の通りにファイル類を組み立ててサーバにアップすればよいのですが、正直、これはけっこう面倒です。また、作った本人以外の人が利用する場合などを考えればかなり扱いにくいものであることが想像できます。
そこで、もっと簡単にWebアプリケーションをサーバにアップし公開できるよう、Webアプリケーションを単一のアーカイブファイルの形で配布することができるようになっています。これは「Web Archive(WAR)」と呼ばれるもので、WebアプリケーションをまるごとZIP圧縮し、拡張子を.warに変更したものです。
WARファイルの作成
WTPを利用している場合、このWARファイルは非常に簡単に作ることができます。まず、プロジェクト・エクスプローラなどでプロジェクトフォルダを右クリックし、[エクスポート]-[WARファイル]メニューを選びます。WARファイルを作成するためのウインドウが現れます。ここで次のように設定を行います。
- Webモジュール
- 宛先
- ソース・ファイルのエクスポート
- 既存ファイルの上書き
これで[終了]ボタンを押すと、指定した場所にWARファイルが作成されます。このWebアプリケーションを公開する場合には、このWARファイルをJavaサーバの公開ディレクトリに入れるだけです。後はJavaサーバが自動的にWARファイルを認識し、これをその場で展開してWebアプリケーションとして使える状態にしてくれます。実に簡単でいいですね。
まとめ
今回は、サーバサイドJavaの最も重要な技術である「サーブレット」の基本について説明をしました。JSPと違い、サーブレットはいろいろと細かな決まりごとに従って作成をしなければいけません。サーブレットクラスの定義、「web.xml」の記述、クラスファイルの配置、どれをとっても正確に行う必要があります。ですから、サーブレットをマスターするためには、まずこれらの基礎的な事柄について確実に理解し、行えるようにしておく必要があります。
WTPを使えば、「web.xml」の記述やディレクトリの構成、WARの出力などほとんどの作業を半ば自動的に行ってくれます。サーブレットを始めると、WTPの便利さを実感するようになるでしょう。ただし、これは「自動的にやってくれるから、自分では知らなくてもいい」ということではありません。少なくとも理解したうえで、開発環境の機能を利用するようにすべきです。
また、今回はJSPが実はサーブレットであったことについても言及しました。これも、JSPを使うだけなら知らなくてもいいことです。が、知った上でJSPを利用するのとでは、おのずと違いが出てきます。さらには、GETとPOSTの違い。これも、知らなくてもWebのページは書けますが、やはりWeb開発を行う以上知っておくべきことです。
サーバサイドの世界では、このような「知らなくても作れるけれど、知っておくべき事柄」というものがあります。いざ何かのトラブルに遭遇したとき、こうした知識があるかないかで大きく対応の差が生ずるものです。Webは、非常に多くの技術の集合体として動いています。「これはなぜ、どういう仕組みで動いているのか」を常に意識して勉強するように心がけたいものです。

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">