拯救Java程序猿的神器:Play Framework
自從選擇了做java程序猿?。。。。。。。?/p>
于是走上了不歸路?。。。。。。。。。?!
一堆的框架要學(xué)?。。。。。。。。。。?!
一堆的配置要寫?。。。。。。。。。?!
啟動(dòng)個(gè)WAS要半小時(shí)啊?。。。。。?!
改個(gè)BUG還要重啟?。。。。。。。。。?/p>
RAD、Eclipse動(dòng)不動(dòng)就卡得要死啊?。。。?!
寫個(gè)增刪改也要一堆的接口實(shí)現(xiàn)設(shè)計(jì)模式?。。?!
看著人家Ruby程序猿羨慕嫉妒恨?。。。。?!
有木有?。。。?!有木有?。。。。。。?!
做java的程序猿你傷不起啊?。。。。。。?!
大神們終于看不下去了?。。。。。。?!
放出神器來拯救世界?。。。。。。。?!
咆哮完畢,就請(qǐng)我們的神器隆重登場吧~~~~~
我們今天的豬腳就是~~~~~
Playframework~~
像玩一樣編程, 傳說中有了它,放個(gè)猴子在電腦前都會(huì)編程了!
先來看看他都有神馬本領(lǐng):
- 實(shí)時(shí)編譯,不需重啟,寫好java代碼,F(xiàn)5刷新瀏覽器就能看到結(jié)果!
- 完善的應(yīng)用框架,從表現(xiàn)層到持久層完整的支持,忘記SSH吧!
- 約定優(yōu)于配置,讓繁瑣的配置文件見鬼去吧!
- 依賴管理支持,直接使用maven倉庫里豐富的第三方組件!
- 簡潔的HTTP數(shù)據(jù)綁定,終于可以扔掉FormBean這種惡心的東西了!
- 強(qiáng)大的工具類庫,簡化一切繁瑣的傳統(tǒng)問題:XML、WebService、安全認(rèn)證、定時(shí)任務(wù)、緩存、郵件、AJAX……
- 組件支持,安裝新的模塊,只需要一個(gè)命令!
- CRUD框架支持,不需代碼生成即可獲得增刪改查支持!
- 豐富文檔,與應(yīng)用一體化!
- 還不夠?!那就自己安裝一個(gè)慢慢體會(huì)吧!
再來五個(gè)很酷的片段,展示一下play的哲學(xué):
1.綁定HTTP參數(shù)到j(luò)ava方法參數(shù)
在Play框架中,獲取http參數(shù)是非常容易的事情。只需要將方法參數(shù)名與HTTP參數(shù)名一致就行了。
比如下面的HTTP請(qǐng)求:
/articles/archive?date=08/01/08&page=2
只需要在java方法中定義兩個(gè)名為date和page的參數(shù)就可以了
- public static void archive(Date date, Integer page) {
- List articles = Articles.fromArchive(date, page);
- render(articles);
- }
Play會(huì)自動(dòng)將HTTP參數(shù)轉(zhuǎn)換為方法參數(shù)的類型
同樣,還可以綁定到j(luò)ava對(duì)象類型,比如這樣一個(gè)對(duì)象:
- public class Person {
- public String name;
- public Integer age;
- }
一個(gè)保存人員的方法只需要這樣寫:
- public static void add(Person p) {
- p.save();
- }
相應(yīng)的HTML表單代碼:
- <form action="/Directory/add" method="POST">
- Name: <input name="p.name" type="text" />
- Age: <input name="p.age" type="text" />
- </form>
2.通過調(diào)用相應(yīng)的java方法實(shí)現(xiàn)操作跳轉(zhuǎn)
在Play里面沒有JavaServlet的forward方法,但跳轉(zhuǎn)到其他的方法仍然是十分簡單。只需要調(diào)用相應(yīng)的java方法,Play會(huì)自動(dòng)生成HTTP跳轉(zhuǎn)的響應(yīng)。
- 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方法的最后,調(diào)用了show方法,這會(huì)產(chǎn)生一個(gè)HTTP 302跳轉(zhuǎn),可有效的避免表單重復(fù)提交。
在任何模板文件中,可以使用相同的語法來生成這個(gè)鏈接:
- <a href="@{Article.show(article.id)}">${article.title}</a>
生成的HTML代碼如下:
- <a href="/articles/15">My new article</a>
3.傳遞java對(duì)象到模板中
在大多數(shù)的Java框架中,需要類似下面方法來傳遞Java對(duì)象到模板中:
- 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);
模板中可以直接使用變量名稱來獲取對(duì)象值,減少大量無用的代碼
4.增強(qiáng)的JPA支持
JPA可以說是Java里面最好的的對(duì)象-關(guān)系映射(ORM)API,Play更是將JPA的支持簡化到了極致。不需要任何的配置,Play就會(huì)自動(dòng)啟動(dòng)基于Hibernate的JPA實(shí)體管理器,而且在代碼重載的時(shí)候自動(dòng)神奇的同步。
如果你使用框架提供的play.db.jpa.Model基類,將會(huì)使代碼更加簡潔:
- public void messages(int page) {
- User connectedUser = User.find("byEmail", connected()).first();
- List<Message> messages = Message.find(
- "user = ? and read = false order by date desc",
- connectedUser
- ).from(page * 10).fetch(10);
- render(connectedUser, messages);
- }
4.文件上傳
直接上代碼吧!
表單:
- #{form @uploadPhoto(), enctype:'multipart/form-data'}
- <input type="text" name="title" />
- <input type="file" id="photo" name="photo" />
- <input type="submit" value="Send it..." />
- #{/}
Java代碼
- public static void uploadPhoto(String title, File photo) {
- ...
- }
還能更簡單嗎?
原文鏈接:http://www.021128.net/2011/05/29/playframeworkintro/
【編輯推薦】