好吧,我知道有類似的線程,但我相信這一個是不同的。首先,我來自C++桌面開發世界,如果我沒有把所有的術語都說得對,那麼這個世界就會如此光禿禿的。「Restful」Java WEB MVC框架
我正在開發的應用程序將是「響應式」,做異步通信並來回傳遞大量JSON。
我需要一個Java的MVC Web框架,支持
1)BLOAT的最低金額和 「幕後法寶」。對於任何框架,總是在框架功能與複雜性之間進行權衡。但是,當我面臨問題並且必須「打架」(時間總是來臨)的時候,我希望這是一場公平的戰鬥。最大限度地減少框架的規模增加了公平對抗的可能性。
2)原生RESTFUL支持。即路由html動詞並執行內容協商。
3)直接支持處理JSON。使用我選擇的任意json處理器,即jackson或gson e.t.c。
4)直接持久性支持,例如, JPA e.t.c.
5)某組模板系統,例如, freemarker,velocity e.t.c.
6)本地認證/授權與支持安全方案的「基於角色的」安全或彈簧安全
上述應納入框架所有容易集成。不是在一些第三方用戶貢獻的模塊中,當框架的新版本出現時,模塊就會消失。
我坐了一天,試驗,發現以下候選人
Spring MVC的3
1)爲了得到衆所周知的「Hello World」的例子並運行在Spring MVC 3,我需要下面的罐子:
- org.springframework.beans-3.1.0.RELEASE.jar
- org.springframework.expression,3.1.0.RELEASE.jar
- org.springframework.asm-3.1.0.RELEASE.jar
- org.springframework.context-3.1.0.RELEASE.jar
- org.springframework.core-3.1.0.RELEASE.jar
- org.springframework.web-3.1.0.RELEASE.jar
- org.springframework.web.servlet-3.1.0.RELEASE.jar
最後,在XML文件中的一些定義,「調度員的servlet .XML」。我不知道這是否說明BLOAT或幕後魔法太多。但它並沒有給在掌控之中somehwat我一個溫暖和模糊的感覺
2)彈簧3支持這一點,從examples只見它看上去並不是很討厭
3)支持的,但是從(2)中的鏈接,似乎處理json僅限於使用jackson庫。至少如果你想使用神奇的註釋進行內容協商。
報價:
「下面的封面,Spring MVC的委託給HttpMessageConverter進行序列化在這種情況下,Spring MVC的調用內置的傑克遜JSON處理器的MappingJacksonHttpMessageConverter此實現自動啓用。當你在類路徑中使用帶有Jackson的mvc:annotation-driven配置元素時。「
位警告信號對我來說。我想對我使用的JSON處理器有明確的程序控制。也許我在這裏錯過了一些東西。這有資格作爲不必要的 「幕後法寶」 在我的書
4)是的
5)是的
6)是
播放框架
1)1.2版本我的磁盤上重達88,5 MB。不會在servlet容器中運行,因此,與春天相比,獲得Hello World示例和運行非常容易,在那裏甚至可以找出我需要的那些罐子被祕密保護。很明顯,幕後發生了很多事情。我想所有我能希望的是,它不會超過它所能做的。這個結論是合理的。但是,當我有一天必須打架時,我會在抵達時死去嗎?誰知道...
2)是的,它是如此優雅。豎起大拇指。
3)是的,但它使用蓋子下的gson。再次,爲什麼我不能以編程方式控制這個?幸運的是,可以傳遞任意序列化程序來覆蓋默認值。我認爲該參數映射到播放renderJSON()本機函數的第二個參數。所以玩半場大拇指傳球。
4)是的。有JPA模塊
5)是的。使用groovy。我沒意見。
6)應該可以通過組合安全模塊和deadbolt模塊。不知道它對抗彈簧安全有多好。我沒有看到任何內置的密碼加密和類似的支持。並且不知道有多難(如果可能的話),那就是與彈簧安全相結合。不知道我是否會舒適地部署敏感數據並依靠這個遊戲!安全框架。可能需要在它上面建立一些東西。
的Restlet
也許因爲它的銷售將用於「不安分的Web服務」一個奇特的候選人。但對於我的觀點(1) - (6)和我的類型的應用程序,大多數用戶交互是異步的,這似乎是一個很好的選擇。我可以在靜態資源或動態生成的內容上運行它,並吐出任何內容類型。
1)Restlet 1.1.1約爲54 MB。瀏覽hello world示例。我喜歡沒有XML文件。就像玩它有自己的服務器(碼頭連接器)。你好世界的例子看起來非常乾淨和容易。
2)是的,這種方法是非常 「綱領性」
3)是的,但它似乎只能通過jackson extension module。考慮到這個框架的程序性質,似乎可能還有其他選擇,但我沒有在文檔或用戶組論壇中找到任何內容。
4)自我描述爲「堅持不懈」。好吧,我想這很好。但是我想堅持下去,而不是重新發明自己的管道。或者至少我想要一點點如何表明它可以通過一些努力來完成。有一個第三方jpa模塊但它建立在restlet 1.0上。的Restlet有一個彈簧組件的,所以也許我可以用彈簧持久性的東西整合...
5)是的,有一個FreeMarker的擴展
6)對該原生方案。用拳頭一眼,並不像春天的安全那樣「富有」。再次,也許我可以整合?
內容
彈簧MVC 3:支持所有的要求,可能與除外(1)。我唯一擔心的是它看起來很複雜,而且我得到了一種模糊不愉快的感覺,沒有被控制。隨着我的應用程序的增長,我真的不希望被框架「陷入困境」。
玩:非常愉快的經歷。甚至樂趣。如果只有安全計劃是更先進的,或者如果我至少可以使用Spring Security集成(並找到如何做到這一點的文件)
的Restlet:出於某種原因,這個框架契合了我。程序化方法引發了一種控制感。 但是,如果我不能堅持一些輕鬆的方式,那麼這是一個不行的。無法真正理解爲什麼這不是內置的。不是每個人都需要這個嗎?
- 什麼說使用上述任何框架的人?
- 我的觀察結果是否準確?
- 我遺漏了一個應該在這裏的框架嗎?
- 替代品?
乾杯
如果不限於Java,但也考慮Groovy中,你可能想看看[Grails的(http://grails.org/) – Robin 2012-01-03 23:06:38