このページで使用している jetty-all というライブラリーは 2 年近く更新がありません(2022 年 6 月現在)。 最新のサーブレット API を使いたい場合は Gradle を使う方法 を試してください。
Tomcat などの Web コンテナーは一度設定に失敗すると、何らかの不都合な履歴が残ってしまい、 再起動/再インストールなどをしても、うまく修復できなくなることがある。 そのようなときは、Tomcat は捨てて、Jetty というライブラリーを利用して、 履歴に依存しない Embedded Server という手法を試そう。
まずは、Eclipse を使う方法を説明する。 Eclipse を使わずに、コンパイル・実行する方法は最後に説明する。
Embedded Server の場合、Eclipse のプロジェクトは、 Dynamic Web Project(動的 Web プロジェクト)ではなく、 ただの Java プロジェクトとして作成する。プロジェクトの名前は英数字ならば何でもよい。
注意: Java 9 以降をインストールしている場合は、 ここで「Create module-info.java」と訊かれるが、 「Don't Create」を選択する。
(必須ではないがお勧め)プロジェクトの encoding を UTF-8 にする。
作成した 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.servlet
や javax.servlet.http
になっています。(現行の Servlet 5.0 API では、 jakarta.servlet
や
jakarta.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.jar と slf4j-simple-1.7.36.jar も 必要となるようです。 最新の API を使いたい場合は Gradle を使う方法 をお勧めします。
ファイル MyDate.java
このサーブレットを起動するための 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
という名前のファイルを作成する。
main
メソッドを持つクラスを再度実行し、
ブラウザーから、
「http://localhost:8080/hello.html」を見て、「Hello World!」と表示されれば成功である。
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 では「;
」の代わりに「:
」になる。)