Web系開発メモ

Java, JavaScript, CSS, HTML など、Webアプリの記事を中心に書いています。

組込Jetty:静的コンテンツを返す

組み込み Jetty(Embedded Jetty)で、Http リクエストに対して静的コンテンツを返す例を書いていきます。今回は Servlet ではなく、Jetty の Handler を使ってみました。

前提

この記事のコードを動かすには、記事「組込Jetty:HelloWorldを返す」の資源(プロジェクトのディレクトリ構成、pom.xml)が必要になります。

手順1. サーバクラスの作成

Jetty の Server を起動するクラスを作成します。静的コンテンツは ResourceHandlerを使って返します。

ejsvr/src/main/java/ejsvr/FileServer.java

package ejsvr;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.util.resource.Resource;

public class FileServer {
  public static void main(String[] args) throws Exception {
    Server svr = new Server(8080);
    ResourceHandler rhand = new ResourceHandler();
    rhand.setDirectoriesListed(false);
    rhand.setBaseResource(
      Resource.newClassPathResource("/public")
    );
    svr.setHandler(rhand);
    svr.start();
    svr.join();
  }
}

静的コンテンツの配置場所は、クラスパスの public ディレクトリになります。

手順2. 静的コンテンツの作成

動作確認用の HTML を作成します。

ejsvr/src/main/resources/public/index.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body><p>Hello, from Jetty Server.</p></body>
</html>

手順3. 動作確認

手順1 で作成した FileServer クラスを実行して、Jetty を起動します(Eclipse などの IDE で 実行すると楽だと思います)。

起動後に http://localhost:8080/index.html を開くと、上の HTML の内容が表示されます。

補足. 静的コンテンツの場所指定

今回はクラスパス(/public)で指定しましたが、ファイルパスで指定することもできます。

    rhand.setBaseResource(
      Resource.newClassPathResource("/public")
    );

のところを、

    rhand.setResourceBase(
      "C:\\..."
    );

のように指定します。