22

背景

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

意见

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

因此,考虑到这些,我将 GWT 视为理解并最终使用 Spring 的垫脚石。然而,再次谷歌搜索这个主题,我遇到了几个主题,比如这个那个似乎违背了 Spring 是什么以及这对 GWT 意味着什么的原始概念

问题

  1. 对 GWT 和 Spring 的看法是否存在误解?如果是这样,一些简短的指导点将不胜感激!
  2. Spring 框架中 GWT 小部件的对应部分是什么?
  3. Spring 框架中 GWT RequestFactory 的对应部分是什么?
4

3 回答 3

27

这实际上取决于您计划如何GWT在应用程序中使用。

GWT最适合用于单主机页面 Web 应用程序。
这意味着所有的流同步和业务逻辑都是在客户端使用GWT.
这是GWT真正闪耀的地方(有关更多详细信息,请参见此处)。

然而,如果你沿着这条路走下去,你最终会得到两个截然不同的应用程序。例如,您将拥有一个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 前端应用程序的数据存储。这就像拥有两个不同且独立的应用程序,它们通过通信协议(RequestFactory、、、RESTRPC)连接。

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

Spring Framework 中没有与 GWT 小部件真正对应的部分(可能对某些 JSF 进行了扩展)。Spring 是关于服务器端的,所以那里的所有视图都是在服务器端创建的。而 GWT 是关于客户端的。

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

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

于 2012-12-05T09:03:30.927 回答
3

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

于 2012-12-05T09:05:49.433 回答
1

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

于 2013-07-23T15:10:24.223 回答