我正在使用GWT,Java和EclipseLink开发Web应用程序。这些选择中的每一个都是我为实现该程序而做出的选择。 GWT是唯一没有牢牢把握它与Spring之类的东西相比的选择。现在我使用GWT小部件来实现客户端和GWT RequestFactory来实现EclipseLink中实体的服务器 - 客户端通信。
所以我认为GWT主要是一个小部件库,它有一个简单的服务器 - 客户端通信框架。这与我查看Spring的方式大致相同,Spring是一个具有更高级和复杂框架的小部件库,用于控制服务器 - 客户端通信 - 有可能它不像GWT那样方便地实现AJAX。
因此,考虑到这些,我认为GWT是理解并最终与Spring合作的垫脚石。然而,谷歌再次讨论这个话题,我遇到过像one和one这样的几个主题,它们似乎违背了Spring的原始概念,以及这对GWT意味着什么
答案 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前端应用程序的数据存储。
这就像拥有通过通信协议(RequestFactory
,REST
,RPC
等)连接的两个不同且独立的应用程序。
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的后端。方式更简单。