SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

WTPではじめるサーバサイドJava入門

サーバサイドJava入門 サーブレットの実装とWARファイルの作成

第5回 JSPとサーブレットの仕組み


サーブレットの公開の仕組み

 話が少し脇道にそれてしまいましたが、再びサーブレットに戻りましょう。サーブレットのソースコードについては一通り理解できましたが、実はもう1つ知っておかなければならないことがあります。それは「サーブレットはどうやって公開されるのか」についてです。

 JSPと違い、サーブレットはただのJavaクラスですから、そのままアクセスしても認識できません。Javaサーバに「このURLにアクセスされたら、このサーブレットのクラスを呼び出して処理してください」ということを教えておく必要があるのです。それを記述してあるのが、WEB-INF内にある「web.xml」というファイルです。

 このファイルを開いてみましょう。WTPでは、専用のXMLeditorが用意されており、XMLの内容を階層的に整理して表示するようになっています。これはこれで便利ですが、今はソースコードを知りたいので、エディタ下部の「ソース」タブをクリックしてソースコードの表示に切り替えてください(「設計」タブをクリックすれば再び先ほどの画面に戻ります)。

WTPでweb.xmlを開いたところ。標準では専用のエディタ画面になる。
WTPでweb.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/j2ee http://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モジュール
  • 「Webモジュール」とは、プロジェクトで作成されたWebContentのことです。これはポップアップメニューになっているので、ここから出力したいWebモジュールを選びます。サンプルのmywebプロジェクトの場合は「myweb」を選びます。
  • 宛先
  • 保存先を指定します。右側にある[参照]ボタンを押し、保存する場所とファイル名を入力します。ファイル名は、必ず「.war」拡張子で終わるようにします。
  • ソース・ファイルのエクスポート
  • サーブレットなどのクラスのソースコードファイルをアーカイブに含めるものです。通常はOFFにしておきます。
  • 既存ファイルの上書き
  • 既に同名のファイルがあった場合、上書き保存します。通常はOFFにしておきます。
WARエクスポートの設定画面で、出力するWebモジュールとファイル名を設定する。
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は、非常に多くの技術の集合体として動いています。「これはなぜ、どういう仕組みで動いているのか」を常に意識して勉強するように心がけたいものです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
WTPではじめるサーバサイドJava入門連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1464 2008/08/19 20:44

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー