GWT是我进入Java进行Web开发的主要原因。哪个java框架最适合它,同时还可以最大限度地利用代码重用来完成表单验证,数据库访问,分页等普通任务?
感谢。
答案 0 :(得分:8)
春天是你应该使用的显而易见的。 GWT有自己的RPC控制器框架,所以我无法真正想到你需要一个Web应用程序框架(如JSF)。
JPA在几个方面是一个合理的选择,但它也存在问题。
首先,它可能是将JPA对象发送到客户端的问题。 GWT(至少1.5)强制执行非常严格的目录结构,因此您必须将实体放在GWT源树下。除此之外,将JPA实体与客户端进行序列化(通常是JSON)可能存在问题。
JPA实体是相当严格的对象,几乎一对一地映射到您的表。但是,这并不是您在表示层中使用数据的方式。 Direct SQL将允许您选择您执行和不需要的数据,专门针对该页面进行定制。因此,JPA实体通常会有许多您不感兴趣的字段,不应该序列化(特别是一对多关系的集合)。
现在,SQL的这一方面 - 将其定制到页面 - 通常被认为是实体的一个优点:您的代码最终不会被一次性使用的值对象所占据。事实上,你仍然在gWT + JPA中得到同样的东西,但不是在持久层或业务层中,而是在表示层中最终得到它们。现在你可以称之为优势。我把它称为六个,另一个是六个。
我实际上认为Ibatis比JPA更适合GWT应用程序模型,因为您使用的是直接SQL,为您的目的定制的对象,这些对象可以从数据库一直使用到客户端。现在这个概念可能会让在Java领域非常普遍的分层狂热者感到恐惧,但是记住分层是一种手段,而不是目的本身。使用它,如果它可以帮助你。如果没有,请不要。
但是Spring在这个堆栈中绝对是必须的。
我还会将您推荐给Why isn’t Google Web Toolkit more popular?和Using an ORM or plain SQL?。
答案 1 :(得分:5)
如果您正在开发更多应用程序,例如网站而不是基于页面的网站,我建议您查看开源框架Vaadin。这是服务器驱动的框架,它在客户端使用GWT来呈现前端,但也自动处理并保持服务器端的敏感业务逻辑。这增加了一些安全性,您不必担心客户端< - >服务器流量(如果您不想这样做),但可以专注于以您喜欢的任何方式实现服务器端逻辑。 最重要的是你真的不必编写任何其他Java代码。在框架中实现自己的新GWT组件也相当容易。
免责声明:是的,我为IT Mill开发Vaadin工作,但看看还没有伤害任何人,是吗?
答案 2 :(得分:3)
现在我正在使用GWT + Struts + Spring + Hibernate
最好使用json数据交换而不是使用GWT webservice
为此,我们可以将逻辑和表示分开。
答案 3 :(得分:2)
我假设您不是指Web框架,因为GWT本身就是一个框架。我会使用JSF来处理应用程序/业务逻辑方面。它使得存储和范围bean以及访问数据库变得容易。阅读数据库,你喜欢任何JPA风格。我对Eclipselink有很好的表现,但现在他们都实现了相同的界面。此外,您可能希望查看EJB以便将所有内容放在一起并注入您需要的JPA。
答案 4 :(得分:2)
因为这些反应伤害了我的眼睛。 JSF,如果你是一个受虐狂或春天,如果你的临床疯狂;)
如果您使用内置的GWT RPC,那么您不需要Web框架,只需使用RPC机制与您的服务器通信即可。对于后端数据库和业务逻辑,您只需使用标准JPA会话Bean和POJO。它是一个非常轻,易于使用和支持的堆栈,没有任何麻烦。如果您要在GWT之外做表格,那么请确保您自己帮忙并查看Stripes。
在ASCII Graphix中:
数据库
JPA Session Beans&的POJO
用于处理GWT和EJB层之间路由的Web层
GWT在浏览器中以javascript身份运行,利用您在EJB层中定义的所有POJO
答案 5 :(得分:1)
我主要将GWT用于内部系统,但发现我需要的只是一个组织良好的代码库,PAC模式和Hibernate。我需要的非常好。
我开始尝试使用像dozer这样的工具来跨客户端服务器序列化bean,但很快发现它不必要。如果你需要foo上的一组条形图,那么下拉列表也就是getBars(foo)。你需要保存foo - RPC来保存()。保持简单,拉下你需要的东西,发布你需要的东西,不再需要。在客户端维护状态,这一切都很好地挂在一起。
对我而言,最重要的事情是了解GWT与构建网络应用程序无关的事实。这是关于在网络上构建应用程序。非常不同。
GurffT
编辑:忘了说,我确实有一个与DAO对象服务器端交互的逻辑层 - 但它们非常简单,只是用new实例化了!答案 6 :(得分:0)
如果你想玩乐,那么为什么不将playframework.org与GWT一起使用? 这可以让你快速上手,并在服务器端拥有你需要的一切(例如jpa通过休眠):)
答案 7 :(得分:0)
在我看来,最好的堆栈是前端的GWT / GIN / Guice,然后Guice为你的后端注入JPA +数据库的一些提供者。
春天很重,比你可能需要的还要多。 Guice非常轻巧,专门用于依赖注入。 Gin在GWT / Javascript环境中基本上和Guice很像。
我也认为有很多价值,特别是当你处于使用新技术的早期阶段时,从概念的角度来看,有一个轻量级的堆栈。春天将带来90%的罐子从一开始就制成,这使得在概念上更难理解什么在做什么。上面的堆栈将引入Gin / Guice / GWT片段,JPA和任何提供者(Hibernate,Toplink等),核心java web东西(servlet api库的服务器运行时),就是这样,所以查看你的jar它是更容易理解你拥有什么和为什么。我认为春天会带来超过15个罐子,对我来说,总是让我更加努力地抓住正在发生的事情以及为什么会这样。我不是春天的憎恨,实际上,春天的mvc是我的最爱,春天非常大,如果你刚刚开始,那么就会有足够的新东西来舒服。在我看来,你不需要增加大于所需框架的复杂性来混淆水域,这只会增加学习曲线。