2015年5月6日水曜日

[Java][Servlet]web.xmlの記載内容

 StrutsやSpringなどのフレームワークを利用する開発プロジェクトが主流となった今、サーブレットプログラムは次第に利用されなくなりつつあるが、Webアプリケーションがどのように動いているか、その仕組みを知っておくことは重要である。最小限のサーブレットアプリケーションは以前の記事で掲載したので、ここでは最も基本的なサーブレットプログラムの仕組みをより詳しく解説していく。
 伝統的なサーブレットの設定ではweb.xmlにサーブレットとURLの対応関係を書くことが多い。web.xmlは次のような<web-app>タグによって開始・終了される。

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

</web-app>

 web-app開始タグの横にある「xmlns」で始まる内容は、EL式を使うために必要な記載事項で、googleを「web.xml web-appタグ」などのキーワードで検索すれば、サンプルが出てくる。EL式は移植性の高いコード記述を行うことができるため、非常に重要である。(JSPファイルにJavaのコードを直接書かず、タグによって可変部分を記述できる)
 この書き方はweb-appタグが新しくなるにつれて若干変わってくる。(EL式を使うためのXML設定がバージョンアップされる場合がある)そのためこの部分の記述については、使いたいタグライブラリなどのバージョンに合わせて変える必要がある。これは前述したgoogle検索で記事を発見できるので、その記事を参考にして実装し、テスト・検証を行う。

 次にサーブレットプログラムとURLの対応関係について記述する。
 Tomcatプロジェクトとして作成したWebアプリケーションを起動するには、TOMCAT_HOMEのconf配下にドキュメントルートを記載したXMLファイルを配置する必要があるのは、前述したサーブレットの最小限プログラムの記事を参照されたい。例えば掲示板プログラムを作成してプロジェクト名をbbsとした場合、Tomcatを起動してブラウザからアクセスするためには、次のURLを記述する必要がある。
http://localhost:0880/bbs

 ただしこの状態だと、まだbbsというドキュメントルート配下のどのサーブレットを起動するか分からない。そこから先のURLの対応関係の記述は、次のようなものとなる。

    <servlet>
        <servlet-name>top/index.html</servlet-name>
        <servlet-class>main.servlet.top.IndexServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>top/index.html</servlet-name>
        <url-pattern>/top/index.html</url-pattern>
    </servlet-mapping>

 <servlet>タグによって「top/index.html」というサーブレットが、Javaの実装クラス「main.servlet.top.IndexServlet」に対応する旨、定義している。ここから先のweb.xmlの記述で「top/index.html」というサーブレット名が出てきた場合、それは「main.servlet.top.IndexServlet」というJavaクラスを指す、という意味になる。
 次に<servlet-mapping>タグによって、「top/index.html」というサーブレット名が「/top/index.html」というURLパターンに対応する旨、定義している。これによってブラウザから「http://localhost:8080/bbs/top/index.html」にアクセスした場合、「main.servlet.top.IndexServlet」というJava実装クラスが呼び出される。
 URLパターンに「.html」という拡張子を採用し、あたかも単純なHTMLを読み込んでいるかのように見せている。(攻撃を受けないための初歩的な仕組みとしてこのように記述することもあるので、本サンプルで紹介した)
 「top/index.html」のように「top」というパッケージを入れるのも、初歩的だが重要なテクニックである。例えば掲示板サイトの場合、入り口(トップ画面)があって、カテゴリ一覧画面があって、スレッド一覧画面があって、といったように複数の大きなまとまりでサイトが構成されることが多い。ポータルサイトなどでも同じである。ニュース、路線検索、天気予報のようにお互いに異なる複数の大きなサイトのまとまりがあるはずである。この大きなまとまりごとにサーブレットやJSPを配置し、メンテナンス性を高めるためにパッケージを使うことが多い。
 このサンプルでいうとトップ画面のサーブレットやJSPは「top」というパッケージ(フォルダ)配下にソースコードが集められることになる。カテゴリ一覧に飛んだ場合は「category」というパッケージ(フォルダ)配下に、カテゴリ一覧のソースコードを集める。
 サーブレットプログラムはPOSTパラメータやhiddenタグを使って画面間のパラメータ受け渡しを行うが、ユーザが直接URLを指定した場合はそのようなパラメータ受け渡しが無効になる。このような場合はそれぞれのまとまりごとのデフォルトページに飛ばすのが、一般的なやり方である。上記サンプルでいうとトップ画面なら「top/index.hmtl」、カテゴリ一覧なら「category/index.html」といったように、それぞれのまとまりごとに持っているデフォルトのページを表示する。

0 件のコメント:

コメントを投稿