Jettyを使う場合には、Jettyサーバの設定を記述したXMLファイルを指定します。このファイルを勝手にconfig xmlと呼ぶことにします。
例えば、jarファイルからJettyを起動する際には、
java -jar start.jar admin.xml demo.xml
というように、2つのconfig.xmlを指定しています。
config xmlとは、なにかというとTomcatでのServer.xml+web.xmlに近い役割を持っています。
よく調べてみると、XMLを使ったスクリプト言語のようでもあります。(クラスをnewしたりPutしたりSetしたりすることで設定を行っている)
私の好む設定としては、Tomcatと同じように、Server.xmlに相当する設定のみを行い、Webアプリケーションごとの設定は、web.xmlに行わせるのが完結で分かりやすいと思います。
つまりaddServletなんかはconfig xmlでは行わないで、web.xmlで設定した方がTomcatなどの互換性もとりやすいと思いました。
設定ファイルについては、デフォルトでついてくるいくつかのconfigXMLを参考に自分用のconfigXMLを作成するとよいと思います。大体中身はみれば分かると思います。
実は、このconfigXMLは、スクリプト言語のようになっていて、JettyのJavadocを見れば特定のクラスにAddしたりなんだりしているのが分かると思います。
例えば、冒頭のこの部分
jetty.xml
<!-- =============================================================== -->
<!-- Configure the Jetty Server -->
<!-- =============================================================== -->
<configure class="org.mortbay.jetty.Server">
<!-- =============================================================== -->
<!-- Configure the Request Listeners -->
<!-- =============================================================== -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- Add and configure a HTTP listener to port 8080 -->
<!-- The default port can be changed using: java -Djetty.port=80 -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<call name="addListener">
<arg>
<new class="org.mortbay.http.SocketListener">
<set name="Port"><systemProperty name="jetty.port"
default="8080"/></set>
<set name="MinThreads">3</set>
<set name="MaxThreads">10</set>
<set name="MaxIdleTimeMs">30000</set>
<set name="LowResourcePersistTimeMs">1000</set>
<set name="ConfidentialPort">8443</set>
<set name="IntegralPort">8443</set>
<set name="PoolName">main</set>
</new>
</arg>
</call>
これは何をしているかというと、
- org.mortbay.jetty.Serverの設定を行っています。
(同時にJavadocのorg.mortbay.jetty.Serverを見てください。) - このクラスに対して、addListenerメソッドをCallします。
(addListenerメソッドは厳密にはorg.mortbay.jetty.Serverのスーパークラスのメソッド) - addListenerメソッドは3つオーバーロードされていて、そのうちのひとつの引数がHttpListenerのメソッドをCallしています。
- そこでHttpListenerのサブクラスである、org.mortbay.http.SocketListenerをnewしています。
- コンストラクタの引数はなしで、newしたあとに、Setterのメソッドを8回読んでいます。
(setPort、setMinThreads…など)
※ 2006/10/22追記
このファイルは、Jetty5時点のXMLで、Jetty6時点ではクラス名などが若干変わっています。(Jetty6ではaddListenerではなく、addConnectorになっている。
解説している内容としてはJetty5,Jetty6とも同様です。
このようにしてインスタンスを生成したListenerをServerクラスにaddしているわけです。なかなか面白い構造になっていると思います。config XMLの詳しい書式は書いていませんが、Javadocを見れば分かるというわけです。
どうように、Contextをaddして、そこにServletをaddすればweb.xmlで設定するような内容も記述できてしまいます。実際にdemo.xmlという付属のconfig XMLを参照すると、Servletの設定までもしています。
しかし、前述したように、私はconfig XMLではweb.xmlでできる設定をすべきではないと思います。(できるだけ新しいことは覚えたくないですし。)