Ratpack で Java Web アプリケーション作成

Ratpack は以前 「Ratpack + JHaml + Morphia で MongoDB を使った Web アプリ開発」 で試しましたが、3年以上経っているので改めて試してみました。

今回は単純な Java Web アプリケーションを Ratpack で作成する事にします。

ソースは http://github.com/fits/try_samples/tree/master/blog/20141229/

Web アプリケーションの作成

今回の作成手順は以下のようになります。

  • (1) HandlerFactory インターフェースの実装クラスを作成
  • (2) ratpack.properties で handlerFactory を設定

ファイル構成

今回は Gradle でビルドしましたので、ファイルは以下のような構成になっています。

  • build.gradle
  • src/main/java/AppHandlerFactory.java
  • src/ratpack/ratpack.properties

ビルド定義

アプリケーションの実行やアーカイブ化を簡単に行うため、Gradle 用の ratpack-java プラグインを使います。

ratpack-java を使う場合、ratpack の依存設定 (dependencies) は要らないようですが、slf4j だけは実行に要るようです。

build.gradle
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'io.ratpack:ratpack-gradle:0.9.11'
    }
}

apply plugin: 'io.ratpack.ratpack-java'

repositories {
    jcenter()
}

dependencies {
    runtime 'org.slf4j:slf4j-simple:1.7.5'
}

(1) HandlerFactory 実装クラスの作成

とりあえず /sample/xxx へアクセスすると単に "sample - xxx" を出力するだけの処理を実装しました。 (xxx は任意の文字列)

出力には Context オブジェクトの render() メソッドを使用し、URL のパラメータ部分 (下記の :id) は PathTokensget() メソッドで取得します。

src/main/java/AppHandlerFactory.java
import static ratpack.handling.Handlers.*;

import ratpack.handling.Context;
import ratpack.handling.Handler;
import ratpack.launch.HandlerFactory;
import ratpack.launch.LaunchConfig;

public class AppHandlerFactory implements HandlerFactory {
    @Override
    public Handler create(LaunchConfig config) throws Exception {
        return chain(
            path("sample/:id", ctx -> 
                ctx.render("sample - " + ctx.getPathTokens().get("id")))
        );
    }
}

(2) handlerFactory の設定

作成した AppHandlerFactory を handlerFactory へ設定します。

こうする事で、実行時に handlerFactory として AppHandlerFactory が使用されます。

src/ratpack/ratpack.properties
handlerFactory=AppHandlerFactory

テスト実行

gradle run でテスト実行できます。

> gradle run

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:configureRun
:prepareBaseDir UP-TO-DATE
:run
[main] INFO ratpack.server.internal.NettyRatpackServer - Ratpack started for http://localhost:5050
・・・

http://localhost:5050/sample/abc へアクセスすると、sample - abc が表示されます。

成果物の生成

gradle distZip を実行すると、build/distributions へ zip ファイルが生成されます。

> gradle distZip

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:startScripts
:distZip

BUILD SUCCESSFUL

zip ファイルを解凍して、bin ディレクトリの起動スクリプト (今回のサンプルでは ratpack_sample) を実行すれば Web アプリケーションを単体起動できます。