使用JSF Spring

时间:2015-07-05 20:11:25

标签: java spring spring-mvc jsf jsf-2

让我在这里澄清我的意图。

我使用JSF和Facelets开发了一个Web应用程序。现在,我的经理告诉我,我需要使用Spring以RESTful方式重新创建相同的应用程序。

我有一些需要解决的问题。

我知道Spring MVC和JSF MVC是不同的意识形态;其中Spring是基于行为的,JSF是基于组件的。这意味着唯一的区别是基于组件的MVC更加自动化,节省您的时间,并将您的注意力转移到视图和模型部分。

我知道JSF使用bean和Spring,你也可以在JSF中执行依赖注入/控制反转,所以我仍然没有看到Spring优于JSF的优势?

您可以在JSF中创建RESTful Web应用程序吗?

为什么我需要Spring? Spring提供的是什么,JSF不会创建Restful Web应用程序?

2 个答案:

答案 0 :(得分:1)

RestFul服务和JSF使用2种不同的模式:

  • spring MVC提供RestFul服务功能。 RestFul服务是SOA(它们提供数据)而不是面向表示的服务"。这意味着数据从服务器发送到客户端,客户端负责呈现它们。一个常见的模板是使用Html和Javascript实现客户端以在Web浏览器中呈现视图(有很多javascript框架可以帮助完成该任务:AngularJS,BackboneJS,JQuery ......)。您也可以从其他客户端(Java客户端,PHP,C#)使用这些服务,并在其他服务中使用这些数据。 spring MVC API也可以使用spring-web APIS在服务器端使用JSP,Freemarker,Velocity等模板引擎呈现HTML视图......在这种情况下,从服务器发送到客户端的内容不是&# 34;面向数据"但已经渲染(通常呈现为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)使用spring core DI实现。我认为它提供了与J2EE实现相同的可能性(除了它不需要应用程序服务器,只需要一个servlet容器)

答案 1 :(得分:-1)

如果你想用JSF做DI,你需要像WildFly这样的Java EE容器,而Spring MVC是在Spring Framework上构建的,只需要像Tomcat这样的Servlet容器。 Spring的DI比Java EE的DI更成熟,Spring自2003年以来一直存在,而Java EE DI自2010年以来一直存在。因此,如果您的经理想要使用Servlet容器,您将无法运行您的JSF应用程序。除此之外,JSF不是为RESTful操作而设计的,你会想要使用Jersey。虽然Spring MVC有它自己的REST实现(你也可以使用Jersey和Spring)。

有关使用spring构建RESTful Web服务的简短介绍指南,请查看https://spring.io/guides/gs/rest-service/