Spring + GWT或Spring与GWT

背景

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

查看

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

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

问题

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

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

GWT最适用于单主机页面Web应用程序。
这意味着所有流同步和业务逻辑都是使用GWT在客户端完成的。
这是GWT真正闪耀的地方(详见此处 )。

但是,如果你走这条路,你最终会得到两个截然不同的应用程序。 你将有一个使用GWT开发的前端和一个使用Spring的后端。 你的后端(Spring或你使用的任何东西)只会充当“数据存储”,为你提供你要在GWT前端显示的数据。 所以你可能不会使用任何Spring MVC'sfunction。

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

对你的问题:

关于GWT和Spring的观点有误解吗? 如果是这样的话,我们将非常感谢您的一些简要指导!

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

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

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

什么是Spring Framework中GWT RequestFactory的反向部分

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

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文件。

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