Spring + GWT或Spring与GWT

时间:2012-12-04 23:46:51

标签: java spring gwt requestfactory

背景

我正在使用GWT,Java和EclipseLink开发Web应用程序。这些选择中的每一个都是我为实现该程序而做出的选择。 GWT是唯一没有牢牢把握它与Spring之类的东西相比的选择。现在我使用GWT小部件来实现客户端和GWT RequestFactory来实现EclipseLink中实体的服务器 - 客户端通信。

浏览

所以我认为GWT主要是一个小部件库,它有一个简单的服务器 - 客户端通信框架。这与我查看Spring的方式大致相同,Spring是一个具有更高级和复杂框架的小部件库,用于控制服务器 - 客户端通信 - 有可能它不像GWT那样方便地实现AJAX。

因此,考虑到这些,我认为GWT是理解并最终与Spring合作的垫脚石。然而,谷歌再次讨论这个话题,我遇到过像oneone这样的几个主题,它们似乎违背了Spring的原始概念,以及这对GWT意味着什么

问题

  1. 对GWT和Spring的观点有误解吗?如果是这样的话,我们将非常感谢您的一些简要指导!
  2. Spring Framework中GWT小部件的对应部分是什么?
  3. Spring Framework中GWT RequestFactory的反对部分是什么?

3 个答案:

答案 0 :(得分:26)

这实际上取决于您计划在应用程序中使用GWT的方式。

GWT最适用于单个主机页面Web应用程序 这意味着所有流同步和业务逻辑都是使用GWT在客户端完成的 这是GWT真正发光的地方(有关详细信息,请参阅here)。

然而,如果你走这条路,你最终会得到两个截然不同的应用程序。 例如,您将使用GWT开发前端,使用Spring开发后端。 您的后端(Spring或您使用的任何内容)只会充当“数据存储”,为您提供要在GWT前端显示的数据。 因此,您可能不会使用任何Spring MVC's功能。

当然您也可以使用Spring MVC并仅使用GWT将web 2.0ish功能添加到您的站点,但对于该用例,我建议使用jQuery,Closure或其他javascript框架。

问题:

  

对GWT和Spring的看法有误解吗?如果是这样,   关于这一点的一些简要指导将非常感激!

如果您按预期使用GWT(单个主机页面Web应用程序),那么您将不会使用Spring的MVC部分。您仍然可以使用授权身份验证 ORM 以及Spring框架的许多其他组件,但GWT会处理所有视图。
Spring或多或少仅作为GWT前端应用程序的数据存储。 这就像拥有通过通信协议(RequestFactoryRESTRPC等)连接的两个不同且独立的应用程序。

  

Spring Framework中GWT小部件的对应部分是什么?

Spring Framework中的GWT小部件没有真正的反对部分(可能有些扩展了JSF)。 Spring是关于服务器端的,所以在服务器端创建了所有视图。而GWT完全是关于客户端的。

  

Spring中GWT RequestFactory的对应部分是什么?   框架

RequestFactory是您的前端应用( GWT )与后端应用( Spring )之间的通信协议。 使用Spring MVC时,您不需要任何通信协议,因为在您已拥有数据的服务器端生成视图。

答案 1 :(得分:2)

GWT不是一个小部件库,而是一个整个框架,用于生成在客户端而不是服务器端运行的完整Web应用程序。基本区别在于spring(MVC模式)是以服务器为中心的,因此它连接到ddbb,执行业务逻辑并生成视图以发送到客户端,因为GWT(MVP模式)在浏览器中运行演示者,生成视图,它只是连接到服务器以获取结果或对象(远程方法)。

说,根据您的GWT应用程序,您可能需要服务器端或多或少的逻辑,以及其他元素,如ddbb,spring等。

何时选择GWT或任何其他框架的决定取决于您是否需要在浏览器中运行丰富(类似桌面的)应用程序。

逻辑上,您可以将GWT和spring混合在任何复杂程度,但逻辑方式是让spring负责数据模型及其业务逻辑,而GWT则负责其余的工作。

学习这种组合的最佳方法是探索使用Spring-roo生成的小项目。它可以为maven,spring,gwt,mvp和rf创建一个完整的项目。只需安装roo 1.2.2并在roo控制台中运行这组命令:

project --topLevelPackage com.project.contacts
persistence setup --provider ECLIPSELINK --database HYPERSONIC_PERSISTENT
database properties set --key database.url --value jdbc:hsqldb:/var/tmp/contacts.db
entity jpa --class com.project.contacts.domain.Contact --testAutomatically
field string name --notNull --sizeMin 1 --sizeMax 30 --class ~.domain.Contact
field string surname --notNull --sizeMin 1 --sizeMax 30 --class ~.domain.Contact
field string phone --notNull --sizeMin 1 --sizeMax 15 --class ~.domain.Contact
web gwt setup
web gwt all --proxyPackage ~.client.proxy --requestPackage ~.client.request
quit

然后执行

mvn gwt:run

我在roo中看到的主要问题是,当你修改模型时,它使用'aspectj'来更新被管理的类,但是你可以在设置项目后使用eclipse删除roo依赖项和aspectj文件。

答案 2 :(得分:0)

查看Objectify的后端。方式更简单。