Web開發框架–第2部分:Play Framework 2.0

作為 評估系列 的第一個候選人, 我們回顧了 Play Framework v2.0 。

可以從Play 文檔站點獲得本文所使用的教程和參考文檔。

本文的第一部分將介紹我們建議對每個框架執行的一組任務,然后繼續評估每個標準項。

在開發工作站中安裝框架

非常簡單,分三個步驟:

  1. 下載ZIP發行版
  2. 解壓縮
  3. 將解壓縮的文件夾添加到您的PATH中

而且很好!

使用免費的IDE,應用程序服務器和數據庫來設置開發環境

無所事事。 該框架提供了一個用于開發的內部應用程序服務器,您可以基于內存或基于文件系統的方式使用內部數據庫。

就IDE支持而言,您可以使用自己喜歡的文本編輯器或功能全面的Java IDE(例如Netbeans和Eclipse)。 由于Play會在您修改資源時即時重新加載所有資源,因此您實際上不需要任何高級的IDE集成。

但是,值得注意的是,該框架在內置操作,快捷方式,自動完成等方面為Eclipse和IntelliJ提供了擴展支持。因此,如果您已經熟悉它們,則可能要使用這兩者之一。

開發框架教程概述的“ Hello world”或類似示例

該框架的教程提出了待辦事項列表應用程序的開發。 從零開始到工作的“ hello world”狀態完全是微不足道的,而且速度非常快(幾分鐘)。 從此過渡到功能全面的應用程序,感覺自然且易于理解。

修改示例應用程序以通過自定義結構執行特定的數據庫查詢并顯示結果

Play 2.0使用EBean庫作為默認數據訪問層,非常易于使用和理解。 框架支持開箱即用的自定義SQL查詢,這沒有什么神秘之處,它類似于JPA本機查詢,并且不需要任何大的麻煩。

將依賴項添加到第三方庫并在我們的應用程序中使用它執行計算

Play 2.0既可以選擇直接將JAR文件添加到項目中(將其復制到/ lib項目文件夾中),也可以通過其內置的依賴項系統(通過SBT使用Apache Ivy)添加依賴項。

為了稍微介紹一下,我決定添加一個Maven中央回購引用并使用該庫。 事實證明,這很簡單,只需在Build.scala文件中添加一行,如果需要,您甚至可以在同一文件中添加自己的存儲庫。

附帶一提,您需要在更改此類內容后重建您的應用依賴關系,否則它將無法編譯。

開發“ Hello world” REST服務

發布JSON REST服務非常簡單, 文檔清晰明確。 唯一的抱怨是在此文檔頁面上沒有明確指出需要什么導入(我不得不花兩分寶貴的時間瀏覽API來找到它們:P)。

Play提供了您非常容易地編碼/解碼JSON和XML所需的所有工具,并且內置的路由機制使將所有HTTP方法映射到特定的控制器Java / Scala方法變得很簡單。

從我們的應用程序中消費我們自己的服務

Play提供了一個內置庫來使用Web服務。 JSON和XML響應的處理非常簡單。

調用是異步進行的,并通過Promises (類似于Java的Futures的結構)進行處理,這使它們在如何在應用程序流中處理它們方面非常強大。

另一方面,調用簡單的REST GET服務的代碼似乎比實際需要的更大或更復雜。 如果在API中提供了用于簡單(即阻止調用)用例的快捷方式,同時仍為需要/想要它的開發人員提供了完全的異步功能,我將不勝感激。

評價

好吧,讓我們通過審查! 這是我們根據上述各項進行的評估:

學習曲線:良好

如果您是Java開發人員(我想對Scala熟練的開發人員來說是相同的),那么開始玩Play真的非常簡單。 我花了不到一天的時間就熟悉了該框架,并且我所有的Java技能都像是仍然可用并賦予了我正在做的事情。

對于經常使用RoR,Django和類似框架的開發人員來說,也應該感到非常熟悉,因為項目的結構和命令行用法非常相似。

簡單任務的開發性能:良好

編寫常用的代碼很容易。 對于Java Web開發人員來說,更改文件并刷新瀏覽器以查看更改的功能似乎是一個奇跡。

復雜/單一任務的開發性能:良好

項目的結構以及與Maven的透明集成使包含第三方Java庫或添加完全自定義的構建類以執行特定的計算變得非常簡單。 簡而言之,您可以在Play項目中的任何Java框架中完成所有操作,在最壞的情況下,您只需編寫普通的舊Java代碼即可正常工作。

依賴管理:良好

Maven集成工作良好且易于使用,您可以將Play項目連接到現有的公司Maven存儲庫,并重新使用所有主要的Maven公共存儲庫。

代碼性能/安全性調整功能:MEDIUM

關于性能調優,在后端方面,您基本上可以做在任何其他基于Java的框架上可以做的所有事情。 無論是否使用內置的API,您都可以根據需要自定義和調整代碼。

在安全方面,我想不到編寫Servlet過濾器以通用方式管理注入和XSS的可能性,但是您可以輕松地開發自己的XSS和CSRF預防組件。

盡管該框架的版本2仍然缺乏針對常見攻擊的內置機制,但我認為應立即使用該機制。 開發人員似乎正在努力 。

平臺升級/冗余功能:BAD

它運行在JVM上,因此可以利用其所有公司功能。 但是目前(版本2.0.x)無法將Play 2應用作為WAR文件部署到常規應用服務器。

我認為這是一個大問題,因為在我的書中必須針對公司和/或任務關鍵型系統使用功能強大且經過驗證的應用服務器,并且內置播放服務器很好,但是我不會睡得太香在生產環境中部署了一個大型應用程序。

Play團隊正在努力解決WAR部署兼容性,并且該功能已標記為2.1版,因此不久就可以解決。

企業市場接受度:中

Java已穩定,被接受和證明,因此平臺本身幾乎總是沒有問題。 這里的大事與上一項相同,目前您無法在其他應用程序服務器中部署Play 2應用程序,并且大多數公司IT部門已經選擇了他們的應用程序服務器,而不是Play 2。

希望當2.1版出現時,此問題將消失。

開發和使用SOAP和REST服務的復雜性:良好

捆綁的WS API簡單明了,易于學習,并且可以完成工作。 對于簡單的場景,它可能會稍微簡單一些,但這并不重要。

TL; DR

Play框架2是每種基于Web的開發類型的絕佳選擇,特別是對于已經精通Java或Scala的開發人員。 它易于學習,使用起來輕而易舉,并充分利用了JVM的所有功能以及可用Java庫的龐大生態系統。

該項目的最新版本(v2.0)缺乏將應用程序打包為常規 Java WAR文件并將其部署到其他應用程序服務器的可能性。 這是一個很大的問題,特別是對于公司環境而言,因為大多數組織已經擁有穩定的應用服務器選擇。 Play小組正在努力為v2.1添加此功能,我們熱切期待。

在我的下一篇文章中,我將回顧Ruby on Rails,我知道這對任何人都不是新聞,但是我認為在所有選項上使用相同的評估過程將為您鋪平道路。

參考: Web開發框架–第2部分: 來自 Ricardo Zuasti博客 博客的 JCG合作伙伴 Ricardo Zuasti的 Play Framework 2.0 。


翻譯自: https://www.javacodegeeks.com/2012/07/web-development-frameworks-part-2-play.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372046.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最全Pycharm教程(10)——Pycharm調試器總篇

最全Pycharm教程(1)——定制外觀 最全Pycharm教程(2)——代碼風格 最全Pycharm教程(3)——代碼的調試、執行 最全Pycharm教程(4)——有關Python解釋器的相關配置 最全Pycharm教程&am…

Looper.prepare()和Looper.loop()

什么時候需要 Looper Looper用于封裝了android線程中的消息循環,默認情況下一個線程是不存在消息循環(message loop)的,需要調用Looper.prepare()來給線程創建一個消息循環,調用Looper.loop()來使消息循環起作用&#…

超速問題的c語言編程,超速行駛問題--精選.doc

超速行駛問題摘要本文主要研究的是探討驅車從始發地至目的地的最短時間路徑問題和最少花費問題,以及在超速情況下的最短時間和最少花費問題。首先,從整個題目的兩個問題入手,發現兩個問題都是優化問題,具有一定的聯系。然后針對第…

重新查看Play Framework發布的值

與Play Framework 2.0一起使用發布的值而不定義表單映射,可能不像Play 1.x那樣明顯,這就是為什么我要編寫此快速備忘單。 對于此快速示例,讓我們定義以下視圖: app / views / index.scala.html (message: String)message: messa…

matlab 微積分

符號變量,symbolic variable 1. 高階導數 高階導數的計算,當然可以用手工的方式,但顯然這種機械重復的推導,更適用于計算機的計算方式: f(x)sinxx24x3?d4fdx4>> syms x; >> f sin(x) / (x^24*x3); >&…

如何查看Ubuntu版本,以及Linux內核版本??

查看Ubuntu版本: 方法一: cat /etc/issue 方法二: sudo lsb_release -a 查看內核版本: uname -r 轉載于:https://www.cnblogs.com/tanrong/p/6937749.html

c語言編碼風格,講嵌入式C語言編碼風格.ppt

講嵌入式C語言編碼風格目 錄 簡介及說明 語言規則 1.基礎 2.數據 3.說明與表達式 4.函數 5.內存及資源 6.源文件 風格指導 7.程序書寫 8.命名 9.文檔 簡介及說明 正確性 易維護性 易移植性 代碼的高效性 語言規則——基礎 編寫清晰表達設計思路和意圖的代碼 針對易讀來優化代碼…

使用Gradle引導舊式Ant構建

Gradle提供了幾種不同的方式來利用您現有的對Ant的投資,包括積累的知識和您已經放入構建文件中的時間。 這可以極大地方便將Ant生成的項目移植到Gradle的過程,并為您提供逐步進行此操作的路徑。 Gradle文檔在描述如何在Gradle構建腳本中使用Ant方面做得很…

實現chrome擴展啟動本地進程 - 補充

實現chrome擴展啟動本地進程 - 補充 標簽: chrome擴展啟動本地程序訪問本地磁盤2014-10-17 11:42 6753人閱讀 評論(17) 收藏 舉報分類:Chrome Plugin版權聲明:本文為博主原創文章,未經博主允許不得轉載。 示例 主要包含如下部分 c…

SpringMVC整合MongoDB

首先&#xff0c;在pom文件中新增spring-data-mongodb的依賴&#xff1a; <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.8.1.RELEASE</version>&l…

單路電壓表c語言編程,用AT89C51單片機制作的數字電壓表

此數字電壓表&#xff0c;利用A/D轉換原理將被測模擬量轉換成數字量&#xff0c;并通過控制系統用數字方式顯示測量結果。本設計采用AT89C51單片機&#xff0c;ADC0809進行模/數轉換&#xff0c;能夠測量8路0&#xff5e;5V的輸入電壓值&#xff0c;可用四位LED數碼管輪流或單路…

ZK的實際應用:MVVM –加載和渲染數據

先前的文章簡要介紹了RIA框架ZK&#xff0c;以及它CSS Selector啟發式控制器機制如何通過使在控制器類中引用UI組件的任務變得相對靈活來減輕UI更改所帶來的一些負擔。 然后&#xff0c;我們在上一篇文章中探討了ZK中的MVVM模式如何允許單個ViewModel提供不同的視圖。 這篇文章…

搭建一個簡單的mybatis框架

一、Mybatis介紹 MyBatis是一個支持普通SQL查詢&#xff0c;存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射&#xff0c;將接口和Java的POJO&#xff08;Pla…

定時操作范例

1 package timetask.demo;2 3 import java.text.SimpleDateFormat;4 import java.util.Date;5 import java.util.Timer;6 import java.util.TimerTask;7 8 /*9 * time類 是一個線程實施&#xff0c;可以用來實現在某一個時間或者某一個時間段后安排某一個任務執行一次或者定期…

c語言空格符 r t,c語言中、\t \r \n 和空格什么意思

具體意思&#xff1a;都是轉義字符&#xff0c;空格就是單純的空格&#xff0c;輸入時可以輸入空格\t 跳格 \r 回車 \n 換行\\ 反斜杠 \a 警告 \b 退格 \f 換頁 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八進制數字。轉義字符串(Escap…

如何在運行時更改日志記錄級別

在運行時中更改日志記錄級別很重要&#xff0c;這主要在生產環境中非常重要&#xff0c;在生產環境中&#xff0c;您可能希望在有限的時間內進行調試日志記錄。 好了&#xff0c;更改根記錄器非常簡單–假設您有一個具有所需記錄級別的輸入參數&#xff0c;只需獲取根記錄器并…

擴展中國剩余定理

轉自&#xff1a;http://blog.csdn.net/clove_unique/article/details/54571216 對于兩個方程$x\equiv c_1\pmod {m_1}$$x\equiv c_2\pmod {m_2}$將其合并為一個方程&#xff0c;有解條件為$(m1,m2)|(c2-c1)$$m\frac{m1m2}{(m1,m2)}$$c(inv(\frac{m1}{(m1,m2)},\frac{m2}{(m1,m…

易語言添加ctrl c鍵,易語言操作快捷鍵匯總

以下是關于易語言的快捷鍵內容&#xff1a;預覽被設計窗口 CtrlEnter運行 F5終止運行 CtrlF5編譯 F7菜單編輯器 CtrlE即時幫助 F1在編輯窗口之間跳轉。按下 Ctrl 鍵后不放&#xff0c;然后反復按 Tab 鍵可以在目前所有的編輯窗口之間跳轉&#xff1b;按下 Ctrl 鍵后同時按下 Ta…

在代理類中引用動態代理

在Stackoverflow中有一個有趣的問題 &#xff0c;關于Spring Bean如何獲??得對由Spring創建的代理的引用以處理事務&#xff0c;Spring AOP&#xff0c;緩存&#xff0c;異步流等。需要對代理的引用&#xff0c;因為如果存在對自身的調用通過代理bean&#xff0c;此調用將完全…

Array的用法總結-swift

Araay是有序的數據集&#xff0c;在OC中分為不可變數組NSArray和可變數組NSMutableArray&#xff0c;在swift中只有常量和變量兩種類型&#xff0c;聲明成變量那就可以說明是可變的了&#xff01; 學習時的具體的用法總結成如下的代碼&#xff1a; //數組var arrInts [Int]()/…