[Java] Jetty-Runnerでお手軽にWebアプリを試す

2018年1月29日月曜日

Java Jetty

Jetty Runner

JavaでWebアプリを試したい場合はTomcatやGlassFishといったアプリケーションサーバを用意して、設定ファイルを作って、デプロイして...といった手順が必要になる。
でも、サンプル作成やデバッグ目的でもっと手軽にServletを作りたい時がある。
Dockerを使って環境を用意してもいいけど、[PHP] PHPのビルトインサーバでxdebugを使うの"php -S"並みにできないだろうか。
こんな時はJettyを使うといい。

Jettyはシンプルで軽量なServletコンテナで以下で公開されている。
https://www.eclipse.org/jetty/

Jettyの中でも今回の目的に沿ったもので、最小構成ということになるとJetty Runnerを使うのが良さそう。
https://www.eclipse.org/jetty/documentation/9.4.x/runner.html

以下のURLからダウンロードするかmavenを使ってインストールしよう。
http://central.maven.org/maven2/org/eclipse/jetty/jetty-runner/

Jetty Runnerはjetty-runner.jarがあればいいだけなので、とても簡単。

サンプルプログラム

なんの変哲も無いServlet。
local/JettySample.java
package local;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/jettysample")
public class JettySample extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
        res.getWriter().println("Hello jetty.");
    }
}

ビルド

ビルドツールも使わずに最小限の構成でやろうとすると以下になる。
Servletのクラスパスもjetty-runner.jarを参照すればいい。
$ javac -Xlint -d WEB-INF/classes -cp jetty-runner.jar local/JettySample.java
$ jar cf jettysample.war WEB-INF

事前にwarファイル用のディレクトリ構成を作っておく必要があるけど、最小限以下があればOK。

WEB-INF/classes/

この下にコンパイルしたclassファイルを配置して、warを作成すればいい。
今回の場合はこうなる。

WEB-INF/classes/local/JettySample.class

これで、jettysample.warができたので、次は実際に動かしてみる。

起動

jetty-runner.jarの引数にwarファイルのパスを渡すだけ。
$ java -jar jetty-runner.jar jettysample.war

終了する時はctrl-cで。
これだけで、8080ポートで起動するので、ブラウザから見てみよう。

http://localhost:8080/jettysample
でアクセスすると"Hello jetty."が表示される。