このページで使用している jetty-all というライブラリーは 2 年近く更新がありません(2022 年 6 月現在)。 最新のサーブレット API を使いたい場合は Gradle を使う方法 を試してください。

Embedded Jetty の使い方

Tomcat などの Web コンテナーは一度設定に失敗すると、何らかの不都合な履歴が残ってしまい、 再起動/再インストールなどをしても、うまく修復できなくなることがある。 そのようなときは、Tomcat は捨てて、Jetty というライブラリーを利用して、 履歴に依存しない Embedded Server という手法を試そう。

Java プロジェクトの作成

まずは、Eclipse を使う方法を説明する。 Eclipse を使わずに、コンパイル・実行する方法は最後に説明する。

Embedded Server の場合、Eclipse のプロジェクトは、 Dynamic Web Project(動的 Web プロジェクト)ではなく、 ただの Java プロジェクトとして作成する。プロジェクトの名前は英数字ならば何でもよい。

注意: Java 9 以降をインストールしている場合は、 ここで「Create module-info.java」と訊かれるが、 「Don't Create」を選択する。

(必須ではないがお勧め)プロジェクトの encoding を UTF-8 にする。

Jar ファイルの配備

作成した Eclipse プロジェクトに Jetty ライブラリーの Jar ファイル jetty-all-9.4.42.v20210604-uber.jar を(ドラッグ&ドロップして)置く。 (最新版は、Maven のリポジトリー などから入手できる。)

この Jar ファイルを右クリックして、「Build Path」—「Add to Build Path」を選ぶ。

サーブレットの作成

サーブレットのクラスは、「New」—「Class」で作成する。 サーブレットの中身自体は Tomcat を使うときと同じである。 (ただし、@WebServet アノテーションはなくても構わない。) ここでは、次のクラス MyDate.java を例に使用する。

Jetty 9.4.42 は やや古い Servlet 3.1 API に対応しているため、 インポートする Servlet のパッケージが javax.servletjavax.servlet.http になっています。(現行の Servlet 5.0 API では、 jakarta.servletjakarta.servlet.http に変更にっています。)

Servlet 5.0 API に対応している Jetty 11 用の jetty-all は β 版 jetty-all-11.0.0.beta1-uber.jar しか出ておらず、2 年近く更新がありません(2022 年 6 月現在)。 この Jar ファイルを使用する場合は、 slf4j-api-1.7.36.jarslf4j-simple-1.7.36.jar も 必要となるようです。 最新の API を使いたい場合は Gradle を使う方法 をお勧めします。

ファイル MyDate.java

main メソッドの作成

このサーブレットを起動するための main メソッドを持つクラスを作成する。 MyDate サーブレットを起動するサンプルは、次の MinimumApp.java になる。

ファイル MinimumApp.java

「…サーブレットを追加」のコメントの次の文はサーブレットのクラス(MyDate) とそれをアクセスするときの URL のパス部分(/MyDate)を指定している。この行はサーブレットにあわせて変更する。 複数のサーブレットを使うときは、servletHandler.addServlet(new ServletHolder(new …), …); を複数指定すればよい。

「HTML などのファイルを置くディレクトリー」のコメントがある部分は HTML や画像など静的ファイルを置く場所を示している。 このプログラムではプロジェクトの「WebContent」というディレクトリーに HTML ファイルや画像などの静的ファイルを置くと仮定している。

「ポートを指定」のコメントがある部分はサーブレットにアクセスするためのポート番号の指定である。 「ポートがすでに使われている…」というたぐいのエラーメッセージがでるときは適宜変更する。

この main メソッドを持つクラスを「Run」—「Run As」—「Java Application」で実行する。 ブラウザーを開いて URL に「http://localhost:8080/MyDate」を入力する。 ここで「8080」と「/MyDate」は main メソッドのなかで指定したものである。 ページが表示されれば、成功である。

静的ファイルの配備

プロジェクトに WebContent というディレクトリーを作成し、 その中に hello.htmlという名前のファイルを作成する。

ファイル WebContent/hello.html

main メソッドを持つクラスを再度実行し、 ブラウザーから、 「http://localhost:8080/hello.html」を見て、「Hello World!」と表示されれば成功である。

Eclipse を使わない場合

Eclipse を使わないで、コマンドラインからコンパイルすることも可能である。 サーブレット本体のクラス MyDate.java と サーブレットを起動するための main メソッドを持つクラス MinimumApp.java は同じディレクトリーにおく。Jetty ライブラリーの jar ファイル jetty-all-9.4.42.v20210604-uber.jar はどこでも良いが、以下では「lib/jetty-all-9.4.42.v20210604-uber.jar」として置いたとして説明する。 hello.html は「WebContent/hello.html」として置いておく必要がある。

以下のコマンドでコンパイルできる。(Linux では「;」の代わりに「:」になる。)

jetty-all-11.0.0.beta1-uber.jar を使用する場合は

以下のコマンドで実行する。(やはり Linux では「;」の代わりに「:」になる。)

参考リンク


Koji Kagawa (kagawa.koji@〜)
(〜の部分はSPAM mail予防のため省略する。)