2015-07-05 33 views
-1

讓我在此澄清我的意圖。使用JSF開發RESTful Web應用程序Spring

我開發了一個使用JSF和Facelets的Web應用程序。現在,我的經理告訴我,我需要重新創建相同的應用程序,但使用Spring以REST方式。

我有幾個問題需要解決。

我知道Spring MVC和JSF MVC是不同的意識形態; Spring是基於動作的,JSF是基於組件的。唯一不同的是,基於組件的MVC更加自動化,節省了您的時間,並將注意力轉移到View和Model部分。我知道JSF使用bean以及Spring,而且你也可以在JSF中做依賴注入/控制反轉,所以我仍然沒有看到Spring比JSF的優點?

您可以在JSF中創建REST風格的Web應用程序嗎?

爲什麼我需要Spring? Spring提供了什麼,JSF不會創建Restful Web應用程序?

+1

它是Java EE(自Java EE 6以來引入)中的JAX-RS與Jersey,RESTeasy ,Restlet等實現。 Spring MVC是一個故事。 「*因此,我仍然沒有看到Spring比JSF的優勢。」Spring是一個有幾個模塊的平臺。另一方面,JSF是一個MVC框架。兩者都是不同的東西。 – Tiny

+1

爲什麼你不斷比較Spring和JSF?你應該比較Spring和Java EE。 – BalusC

+0

閱讀食物:http://stackoverflow.com/q/29982657和http://stackoverflow.com/q/18369356 – BalusC

回答

-1

如果你想用JSF做DI,你需要像WildFly這樣的Java EE容器,而Spring MVC是建立在Spring框架上的,只需要像Tomcat這樣的Servlet容器。 Spring的DI比Java EE的DI更成熟,Spring自2003年以來一直存在,而Java EE DI自2010年起纔開始使用。因此,如果您的經理希望使用Servlet容器,那麼您將無法運行JSF應用程序。除此之外,JSF並不是針對RESTful操作而設計的,因此您希望使用Jersey。雖然Spring MVC有它自己的REST實現(你也可以在Spring中使用Jersey)。

對於短introductionary指南構建RESTful Web服務與春天,看看https://spring.io/guides/gs/rest-service/

+0

是的,現在我想我可能只是使用Spring,因爲它提供了MVC,REST和DI/IoC。另外,我是否可以使用Facelets作爲Spring MVC的View部分?這意味着我將如何創建和展示我的網頁? – Viratan

+0

常見模式是在HTML5/JavaScript中編寫前端頁面,然後與RESTful後端服務通信。諸如JQuery或AngularJS之類的JS框架使AJAX與RESTful JSON服務的通信變得輕鬆。 – wggn

1

RESTful服務和JSF可與2型動物圖案:

  • 的Spring MVC提供寧靜的服務功能。 RestFul服務是SOA(他們提供數據)而不是「面向表達」。這意味着數據從服務器發送到客戶端,客戶端負責渲染它們。一個常見的模板是使用Html和Javascript實現客戶端以在Web瀏覽器中呈現視圖(有很多JavaScript框架可以幫助完成該任務:AngularJS,BackboneJS,JQuery ...)。您也可以從其他客戶端(Java客戶端,PHP,C#)使用這些服務,並在其他服務中使用這些數據。 Spring MVC API也可以使用spring-web APIS在服務器端使用JSP,Freemarker,Velocity等模板引擎在HTML中呈現視圖...在這種情況下,從服務器發送到客戶端的內容不是「面向數據「,但已經呈現(它通常呈現爲HTML流,已準備好由客戶端/瀏覽器顯示)

  • JSF通過獲取數據並將其呈現給客戶端來封裝整個客戶端 - 服務器流使用JSF模板和bean管理。該過程由7個步驟生命週期實施。這個生命週期隱藏了開發者的客戶端 - 服務器通信過程(但它在客戶端使用javascript/Mojarra,服務器端使用servlet來實現此生命週期)。這是管理客戶端 - 服務器MVC模式的另一種方式。

這些是2個不同的「哲學」。RestFul體系結構的一個優點是它是SOA:它們被用來提供使用標準數據格式(Json,XML)的互操作性。 互操作性可幫助您更改客戶端或服務器實現,而不會影響其中一種(您可能會在未來使用其他技術堆棧重新實現您的客戶端,而無需再次開發服務器,也可以使用不同的技術實現不同客戶端:C#,.net,Java,Javascript等)

使用JSF,您可以實現相同的目標,實現格式特定的渲染器。但我不認爲這是JSF主要用作SOA的用途。

關於所使用的依賴注入,J2EE JSF框架將使用J2EE DI API(重要的是要注意DI框架的J2EE實現需要J2EE應用程序服務器工作),Spring自然基於DI模式並使用它自己的實現(可以在servlet容器中運行)。

spring-web的JSF實現(請參閱the spring documentation)使用彈簧核心DI實現。我認爲它提供了與J2EE實現相同的可能性(除了它不需要應用程序服務器,只需要一個servlet容器)