本文通過(guò)5
個(gè)例子展示了Play!
框架背后的哲學(xué)。?
1. 綁定HTTP參數(shù)到Java方法
通過(guò)在Java方法中定義和HTTP參數(shù)同名的參數(shù)就可以方便的取得HTTP中的參數(shù)值。
例如:
/articles/archive?date=08/01/08&page=2
你可以通過(guò)定義方法參數(shù)來(lái)獲取date和page的值:
public?static?void?archive(Date?date,?Integer?page)?{
????List<Article>?articles?=?Articles.fromArchive(date,?page);
????render(articles);
}
也可以直接綁定到類(lèi):
public?class?Person?{
??String?name;
??Integer?age;
}
public?static?void?add(Person?p)?{
??p.save();
}
HTML中如下定義:
<form?action="/Directory/add"?>
?Name:?<input?type="text"?name="p.name"?/>
?Age:?<input?type="text"?name="p.age"?/>
</form>
2. 通過(guò)調(diào)用Java方法重定向到相應(yīng)的action
只需要調(diào)用相應(yīng)的Java方法就能方便地重定向到另一個(gè)action,Play!會(huì)生成正確的redirect response,而不是forward。
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);
}
注意:在edit
action的最后重定向到了show action。
?
在模板中你可以使用類(lèi)似的符號(hào)來(lái)生成鏈接:
<a
href="@{Article.show(article.id)}">${article.title}</a>
最終生成的HTML:
<a href="/articles/15">My new
article</a>
?
3. 直接把Java對(duì)象傳遞到頁(yè)面模板
在大多數(shù)Java框架中,你需要寫(xiě)類(lèi)似下面代碼來(lái)把Java對(duì)象傳遞給頁(yè)面模板:
Article?article?=?Article.findById(id);
User?user?=?User.getConnected();
Map<String,?Object>?model?=?new?HashMap<String,Object>();
model.put("article",?article);
model.put("user",?user);
render(model);
在Play!中你只需要這么做:
Article?article?=?Article.findById(id);
User?user?=?User.getConnected();
render(article,?user);?
4. 方便的文件上傳
在Play!框架中實(shí)現(xiàn)文件上傳很方便:
HTML form :
<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> Java代碼:
public?static?void?uploadPhoto(String?title,?File?photo)?{
???
}
5. 不用任何配置就可以把應(yīng)用分布到多個(gè)JVM
由于應(yīng)用程序被設(shè)計(jì)成無(wú)狀態(tài)的,所以你可以簡(jiǎn)單地在多臺(tái)服務(wù)器上啟動(dòng)同一個(gè)應(yīng)用,然后通過(guò)HTTP層面的負(fù)載均衡來(lái)實(shí)現(xiàn)分布式應(yīng)用。不需要設(shè)置一個(gè)負(fù)債的服務(wù)器集群。
----------
Play With Play!系列目錄
http://m.tkk7.com/shinewang/archive/2008/12/25/248237.html