今年はDropwizardが盛り上がる、という話をチラホラ聞きます。
リリースノートをみるとバージョンとしては2013年3月に0.6.2が出て、2014年6月現在0.7.x系のようです。
0.7.0-SNAPSHOTのリリースノートみると、「Upgraded to Java 7」とあって、Java 8出たんだけどなぁと思ったり。
そこで思い出したのですが、Java 8が出たとき話題になっていたSparkってどんななんだろう?と触ってみました。
Spark Micro Web Framework
トップページの作りがうまい感じで
http://www.sparkjava.com/

「え!?こんなんで書けるの!?」って感じで「やってみよう!」意欲をうまく駆り立てる感じですねー。そしてあっさり動くから楽しくなってしまう(^^;
この書き方なんなの?とJava 8やラムダに興味持つ人も増えるのでは…とも思ったり。
自分でも試してみましたが
package jp.co.hoge.myfirstspark;
import static spark.Spark.*;
public class KickSpark {
public static void main(String... args){
get("/makimaki", (req, res) -> "堀北真希さん");
}
}
こんなの書いて実行し、URLにアクセスすると

手軽すぎる(^^;
Lambdaの部分はRouteクラスのインスタンスとなっていて、無名クラスで書くと
package jp.co.hoge.myfirstspark;
import spark.Request;
import spark.Response;
import spark.Route;
import static spark.Spark.*;
public class KickSpark {
public static void main(String... args){
get("/makimaki", new Route() {
@Override
public Object handle(Request req, Response res) {
return "堀北真希さん";
}
});
}
}
のようになります。Java 8のおかげでスッキリ書ける(>_<)
ポートはデフォルトで4567となっていますが、以下のようにで簡単に変えることができたり。
package jp.co.hoge.myfirstspark;
import static spark.Spark.*;
public class KickSpark {
public static void main(String... args){
setPort(7890);
get("/makimaki", (req, res) -> "堀北真希さん");
}
}

処理の前後でフィルタを挟んだり
package jp.co.hoge.myfirstspark;
import static spark.Spark.*;
public class KickSpark {
public static void main(String... args){
before((req, res) -> {
System.out.println("全てのリクエスト共通");
});
before("/makimaki", (req, res) -> {
System.out.println("堀北さんを呼ぶ前の準備");
});
get("/makimaki", (req, res) -> "堀北真希さん");
after("/makimaki", (req, res) -> {
System.out.println("メチャクチャかわいかった!");
});
after((req, res) -> {
System.out.println("全てのリクエスト共通");
});
}
}
localhost:4567にアクセスすると(上記例だとNot Foundページですが)
全てのリクエスト共通
全てのリクエスト共通
localhost:4567/makimakiにアクセスすると
全てのリクエスト共通
堀北さんを呼ぶ前の準備
メチャクチャかわいかった!
全てのリクエスト共通
Cookieやセッション管理はもちろん、リクエストと応答まわりの処理、テンプレートエンジン(サイトでの例はFreeMaker,Apache Velocity,Mustacheの3つでした)利用もできるので、一通りの機能はあるのではないかなーと。
Java 8とNetBeans 8での具体的手順
最後に、自分のWindows環境でやってみた手順を一応貼っておきます。
Java 8とNetBeans 8、Mavenでやりました。
NetBeansの「ファイル」から「新規プロジェクト」を選択

カテゴリ「Maven」でプロジェクト「Javaアプリケーション」を選択

プロジェクト名やその他情報は適当に

pom.xmlを開いて

JDK7(以下1.7)になっていれば

JDK8(以下1.8)に変えて、Sparkの依存を定義します。
<dependencies>
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>

プロジェクトを右クリックしてクラスを追加します(昔は適当なMainクラスを自動で作ってくれていたような…)


以上で準備完了。最初にのせたようなコードを書いて
package jp.co.hoge.myfirstspark;
import static spark.Spark.*;
public class KickSpark {
public static void main(String... args){
get("/makimaki", (req, res) -> "堀北真希さん");
}
}
実行するだけです。
以下のようにListeningになればOK
