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
を例に使用する。
ファイル 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 と MinimumApp.java
は同じディレクトリーにおく。jetty-all-9.4.42.v20210604-uber.jar
はどこでも良いが、以下では「lib/jetty-all-9.4.42.v20210604-uber.jar
」として置いたとして説明する。
hello.html は「WebContent/hello.html
」として置いておく必要がある。
以下のコマンドでコンパイルできる。(Linux では「;
」の代わりに「:
」になる。)
(印刷の都合上折り返しているが、実際には一行で入力する。)
javac -encoding UTF-8 -classpath .;lib/jetty-all-9.4.42.v20210604-uber.jar MinimumApp.java
以下のコマンドで実行する。(やはり Linux では「;
」の代わりに「:
」になる。)
(印刷の都合上折り返しているが、実際には一行で入力する。)
java -classpath .;lib/jetty-all-9.4.42.v20210604-uber.jar MinimumApp