Skip to content

Instantly share code, notes, and snippets.

@PhilOwen
Last active March 25, 2017 03:13
Show Gist options
  • Save PhilOwen/3f5701a3e368064ddd6f09a9520d0947 to your computer and use it in GitHub Desktop.
Save PhilOwen/3f5701a3e368064ddd6f09a9520d0947 to your computer and use it in GitHub Desktop.
Java軽量フレームワークのSparkをVelocityと

Javaのウェブマイクロフレームワーク、Sparkを使ってみる。 Java系のテンプレートエンジンVelocityも併せて使ってみた。

Java関係の技術は、Java自体の文法やら、 関連するXMLの設定やらが何かと冗長で面倒くさい。 が、SparkはRubyのSinatraの影響を受けて、 わりとすっきりまとまっていた。
Apache Sparkという、ビッグデータ処理用の ぜんぜん違う技術もあるので混同注意。

ルーティングがラムダ式であっさり書かれているが、 これをScalaに移植しようとするとすんなりとはいかず、 Java 8ならではだなぁと思う。
一応、ScalaだとScalatraというマイクロフレームワークもあるが、 堂々とした二番煎じ感が…

Velocityの方は、あまり簡潔な感じはなく、 テンプレートエンジンなのに機能を詰め込み気味で 少し古い感じを受ける (テンプレート側ではロジックを持たせたくない主義)。 また、テンプレートはコンパイル時に評価されず、 型チェックなどはない。

mkdir -p src/main/resources
mv index.vm src/main/resources

とやって、テンプレートファイルをリソースに配置し、 sbtで実行すればいい。 4567ポートで起動する。

References

libraryDependencies ++= Seq(
"com.sparkjava" % "spark-core" % "2.5.5",
"com.sparkjava" % "spark-template-velocity" % "2.5.5"
)
import java.util.*;
import static spark.Spark.get;
import spark.ModelAndView;
import spark.template.velocity.*;
public class HelloSpark {
public static void main(String[] args) {
get("/", (req, res) -> {
Map<String, Object> model = new HashMap<>();
model.put("title", "favorite food");
model.put("foods", new String[]{"pineapple", "apple", "pie"});
return new VelocityTemplateEngine().render(
new ModelAndView(model, "index.vm")
);
});
get("/favorite/:food", (req, res) -> {
return "You like " + req.params(":food") + "?";
});
}
}
<html>
<body>
<h1>$title</h1>
<ul>
#foreach($item in $foods)
<li><a href="favorite/$item">$item</a></li>
#end
</ul>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment