( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

Java Webフレームワーク Play!で遊んでみる - Introduction

Home — PlayframeworkというWebフレームワークがあるようです。
Home — Playframework

ちょっと遊んでみましょうか。

Play!の特徴

Page not found — Playframework
斜め読みしてみる。

  • Pure Java Framework Railsっぽいディレクトリ構成だ。
  • HTTPにフルアクセス。REST URLをサポート
  • Groovyによる効率的なテンプレートエンジン
  • HotDeploy可能。エラーが発生したらそれっぽいソースを表示してくれる
  • フルスタックのフレームワーク :JDBC-HibernateによるORM。Memcacheサポート。JSONやXMLによるWebサービス。OpenIDサポート。画像操作API

Play!の5つのコンセプト

Page not found — Playframework

リクエストパラメータのバインド

HttpリクエストパラメータをJavaのメソッド引数に渡してくれるらしい。

/articles/archive?date=08/01/08&page=2

こんなURLから、以下のようなメソッドの引数にdate=08/01/08、page=2でメソッド呼び出ししてくれる。

public static void archive(Date date, Integer page) {
    List<Article> articles = Articles.fromArchive(date, page);
    render(articles);
}

POJOへのバインドもできる。

<form action="/Directory/add" >
 Name: <input type="text" name="p.name" />
 Age: <input type="text" name="p.age" />
</form>

こんな感じのフォームをサブミットしたときに、以下のようなメソッド引数のPersonクラスのプロパティにp.nameとかの入力値が設定される。

public static void add(Person p) {
  p.save();
}
異なるActionへのリダイレクト

あるActionから別のActionへforwardする場合は、単純なメソッド呼び出しでOK。

public static void show(Long id) {
    Article article = Article.findById(id);
    render(article);
}

public static void edit(Long id, String title) {
    Article article = Article.findById(id);
    article.title = title;
    article.save();
    show(id);
}
テンプレートへのパラメータ渡し
Article article = Article.findById(id);
User user = User.getConnected();
render(article, user);

renderメソッドの引数に渡せばOK。

ファイルアップロード
<form action="@{Article.uploadPhoto}" method="POST" enctype="multipart/form-data">
    <input type="text" name="title" />
    <input type="file" id="photo" name="photo" />
    <input type="submit" value="Send it ..." />
</form>

こんなフォームでファイルアップロードしたときは、

public static void uploadPhoto(String title, File photo) {
   ...
}

こんな風にメソッド引数にアップロードされたFileオブジェクトが渡される。

複数JVMでの分散

基本ステートレスなので、複数のサーバで同じアプリをおいてロードバランサーとかHTTPレベルでバランシングすればいいよって話。