2007 年 2 月 28 日 23 時 56 分

Web アプリケーションのディレクトリ構造


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


なかなか Struts が出てこないが、
まだ少し Serlvet について調べることがある。

Servlet API については大体分かったので、
次は Web アプリケーションのディレクトリ構造を調べよう。

Servlet コンテナに Web アプリケーションを導入することを
「Deployment」(配置・配備)と呼ぶが、
Servlet 規格では、この作業を単純化するため、
Web アプリケーションのディレクトリ構造を定めている。

原則として Web アプリケーションディレクトリ内には、
自由にファイルやサブディレクトリを作成して構わないが、

ルート直下にある META-INF と WEB-INF ディレクトリは、
Servlet コンテナによって特別な扱いを受け、
外部には直接公開されないようになっている。

そのため、直接公開したくない設定ファイルや、
アプリケーションの設定ファイルは、
このディレクトリ配下に格納すると良い。

また、以下のパスには明確な役割が決められている。

    /WEB-INF/web.xml
    /WEB-INF/classes/(ディレクトリ)
    /WEB-INF/lib/*.jar

/WEB-INF/web.xml は配備記述子と呼ばれ、
Servlet の割り当て等の Web アプリケーションに関する
各種設定情報を記述したファイルである。

Servlet コンテナはこのファイルを読み取って
Web アプリケーションをコンテキストにロードする。
この内容についてはまた後で調べることにしよう。

/WEB-INF/classes/ ディレクトリ配下には、
Java の CLASS ファイルやリソース等を格納する。
このディレクトリは Servlet コンテナによって、
実行時に CLASSPATH の先頭に追加される。

つまり、Web アプリケーション用のコードやリソースは、
ビルドしてこのディレクトリに出力すれば良い。

/WEB-INF/lib/ ディレクトリ直下には、
ライブラリ(JAR ファイル)を格納する。
これら *.jar ファイルも全て、
実行時に CLASSPATH に追加される。

Web アプリケーションが依存する、
ライブラリやフレームワークなどは、
このディレクトリに配置すれば良い。

このような特性があるため、classes や lib 配下には、
関係ないファイルを格納すべきではない。

上記レイアウトに沿ってファイルを配置した場合、
Servlet コンテナによっては、決められたディレクトリに、
上記を丸ごとコピーするだけで配備が完了する。

また、上記レイアウトのディレクトリを圧縮し、
WAR ファイルを作成した場合、
WAR ファイル単独で持ち運べるようになる。

さて、例として、JSP と 自前の Servlet を使った
Web アプリケーションのレイアウトを考えてみよう。

(環境)
・サーバは example.com 待機ポートは HTTP (80)
・アプリの配備されたコンテキストのパスは、/mysys
・自前の Servlet 実装クラスは jp.loafer.MyServlet
・*.jsp には JSP を割り当てるとする
・*.my には MyServlet を割り当てるとする

・ファイル
    /index.jsp(ホームページ)
    /login.jsp(ログインページ等)
    /menu.js(外部からアクセス可能なファイル)
    /res/default.css(上に同じ。パスを切っても良い)
    /WEB-INF/web.xml(配備記述子)
    /WEB-INF/lib/commons-lang-2.3.jar(ライブラリ等)
    /WEB-INF/classes/jp/loafer/MyServlet.class
    /WEB-INF/mysys-config.xml(アプリ固有の設定等)

上記の場合、menu.js や default.css は、
http://example.com/mysys/menu.js のようにアクセス可能。

*.js や *.css には Servlet を割り当てていないが、
Servlet コンテナの既定の処理(default servlet)により、
Web サーバと同じように直接ファイルが公開される。

しかし、mysys-config.xml はWEB-INF 内にあるため、
http://example.com/mysys/WEB-INF/mysys-config.xml では、
404 Not Found となりアクセスできない。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.