WARは、Javaのウェブ用のアーカイブ(Web Archive)のこと。J2EEの仕様で決められているらしい。
(実はWARは「Web Application Archive」が正しいらしいんだけど、それなら略はWAAなのでは…?
でもEARもそういう略し方じゃないな(苦笑)
いや、そうじゃなくて「Web Application」はいわばそれだけで1つの単語で、「WebApplication Archive」という取り方なのか?)
コンテンツ(jspファイルやらhtmlファイルやら画像ファイル、およびウェブ用のプログラム等)を一つのファイルにまとめたもの。
J2EEサーバー上にコンテンツを持って行くのに便利。
warファイルを作成するにはantを使用するのが便利。
xxxプロジェクト | xxx | htmlファイルやjspファイル等を置く。サブディレクトリも作成可。 | ||
WEB-INF | web.xml | 呼び出すサーブレット等を書いた設定ファイル | ||
classes | コンパイルしたclassファイル | |||
lib | 実行時に使用するjarファイル | |||
src | javaファイル | |||
bin | build.xml | |||
xxx.war | 生成されるwarファイル |
build.xml:
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="make_war" basedir=".." default="mk_war">
<property name="xxx.home" location="xxx" />
<!-- warファイルの作成 -->
<target name="mk_war">
<war destfile="xxx.war" webxml="${xxx.home}/WEB-INF/web.xml">
<fileset dir="${xxx.home}">
<exclude name="**/web.xml" />
</fileset>
</war>
</target>
</project>
要するに、xxxプロジェクト内のxxxディレクトリが圧縮される。
そういう意味ではjarファイルと同様だが、warファイルではweb.xmlが必須。
antでビルドする前のweb.xmlはどこにあってもよくて、warタスクのwebxml属性で場所を指定する。ビルドすると、(warファイル内の)WEB-INFの直下に置かれる。
上記の例では元々WEB-INFの直下に置いているため、filesetのexcludeでわざわざ除外している。
(こうしないと、二重に存在することになってエラーとなる)
(web.xmlがどこにあってもいいとは言え、最終的にWEB-INFの直下にあるので、最初からそこにあった方が分かりやすいと思う)
J2EEサーバーの所定の場所にwarファイルを置けば、勝手に展開してくれる。
展開して使える状態にすることをデプロイ(deploy)と言う。
→Tomcat5.5の展開場所
→WebLogic10の展開場所 [2008-08-02]
→JBossASの展開場所 [2008-08-15]