jettyへのWebアプリケーションのデプロイ

Webアプリケーションサーバjettyにアプリケーションをデプロイするには、

  1. アプリケーションのwarファイルをjettyインストールディレクトリの任意の場所(通常は、webappsディレクトリ下)に配備(コピー)する。
  2. サーバ起動時に指定する設定ファイルを作成する。

の2点。なお、6.0では、webappsに配備する場合は、設定ファイルの作成は必要なく、単にwarをwebappsディレクトリにコピーするだけでよい。
ただし、TOMCATで動作しているからといってそのまますぐにアプリケーションが動作するわけではなさそう。(6.0.1では、改善されているようだが。)以下で使用したjettyは、5.1.4。

warに含まれるweb.xmlの内容

ちゃんとnamespaceを指定しなければいけない。たとえば、

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>click-servlet</servlet-name>
    <servlet-class>net.sf.click.ClickServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>click-servlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>redirect.html</welcome-file>
  </welcome-file-list>
  
</web-app>

では、だめ。web-appタグは以下のようになっていなければサーバ起動時にエラーとなる。

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
    version="2.4">
(以下略)

namespaceを使っていないからといって、namespaceの実体を省略してはいけないようだ。

サーバ起動時に指定する設定ファイル

etc/demo.xmlを参考に作成したが、書き方がよくわからない。下の例では、作成したアプリケーションは、clicktest.warにまとめられており、サーブレットは、clicktest/にある。demo.xmlの適当な場所に以下の行を追加した。

  <Call name="addWebApplication">
    <Arg>/clicktest/*</Arg>
    <Arg><SystemProperty name="jetty.home" default="."/>/webapps/clicktest.war</Arg>
    <Set name="extractWAR">true</Set>
  </Call>

最初のArgタグは、サーブレットにアクセスするパスを指定し、次のArgタグはアプリケーションそのもののファイルをしていているらしい。展開したものを指定する場合は、配備したディレクトリのパスを指定すればできた。Setタグは、TOMCATのように実行時にwarを展開するのかと思ったが、実際に動作させてみると、warを配備したディレクトリに展開はされないようだ。demo.xmlには、値がfalseになっているエントリもあるが、この場合、値をfalseにすると、VM_global_library.vmというリソースがないというエラーになる。(5.1.11では、値をfalseにしてもエラーとならない。)
アプリケーションサーバ自体はTOMCATよりはるかに起動が速い。
あと、welcom-fileが利いていないかもしれない。http://localhost:8080/clicktest/とだけ指定しても、redirect.htmlに指定されたページにジャンプしない。(5.1.11, 6.0.1ではジャンプする。)