写点什么

Dhanji Prasanna 谈 Google Sitebricks Web Framework

  • 2009-10-11
  • 本文字数:3590 字

    阅读完需:约 12 分钟

Sitebricks 是由 Google 推出的构建在 Google Guice 之上的全新 Web 应用开发框架,其目标在于早期的错误检测、高效的代码以及快速的开发。InfoQ 有幸采访了 Sitebricks 创建者与 Google Wave 核心工程师 Dhanji Prasanna 一探究竟。

InfoQ:构建这样一个全新 Web 框架背后的动机是什么?现有的众多框架还不够使么?

Dhanji:我已经在这上面花费了大量的时间和心力(从 Java 5 出来就已经着手开发了)。在试用过几个流行的框架如 Struts1/2、JSF 等之后感受到了不少痛苦之处,从那以后就开始不断尝试让 Web 编程更加有趣,同时也减轻自己的痛苦。我向很多人介绍了 Sitebricks,他们都对这个框架的特性感到无比兴奋。一开始他们都很不屑:不就是另一个框架而已么?但后来却转变了态度,认为这是一个优秀的框架。这给了我极大的自信,也支撑着我一路走到现在。 我相信 Sitebricks 还有很大的创新空间。虽然我并不喜欢使用“REST”这个时髦词,但 Sitebricks 在其设计之初就全面拥抱核心的 HTTP 规范,现在很缺这种解决方案。如果标榜其为“RESTful Web 框架”,那会吸引更多的人,然而我们相信 Sitebricks 本身的特性就会让人们感到兴奋,因为事实就是如此。

InfoQ:相对于传统的 Java 框架和技术比如 JSF、Wicket 等等,Sitebricks 有什么与众不同之处呢?

Dhanji:Sitebricks 与他们都不一样。JSF 和 Wicket 都通过采取类似于桌面 UI 的方式进行 Web UI 设计:事件、组件以及与用户的点击和行为进行交互的 Widget。Sitebricks 直接构建在 HTTP 之上,这意味着它与 JAX-RS(面向 RESTful Web Services 的 Java API)有一拼,不得不提的是,我也对 JAX-RS 的设计做出过贡献,但是目前它还不支持模板,也没有提供客户端 API。 我对现有的 MVC 框架感到最不爽的地方就是他们出来的快,消失的也快,而且还隐藏了 HTTP 层。这导致了很多奇怪的行为,比如自动注入用于捕获点击的 javascript 并将其转换为收集状态的 POST。另外这些框架都很庞大,做起原型来可不是一件轻松的事。而 Sitebricks 却很简洁,它拥抱 HTTP,热爱 HTTP,非常擅于获取与交换资源和消息。

基于这一点,我们采取类似于函数式语言的方式来构建模板层,这样用户就可以一种简洁的方式组合多个页面(通过折叠和投影)了。其中的灵感来自于函数式语言如 Scheme 和 Haskell,Terrence Parr 关于模型 / 视图分离的论文( http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf )也是我们所遵循的重要原则。

InfoQ:能否谈谈 Sitebricks 背后所遵循的基本原则及采取的技术选型?

Dhanji:当然可以。主要的原则就是简洁与类型安全,就像 Guice 那样。从导航到 URL 映射及模板语言的编写,所有内容都由一个额外的错误检测及静态分析层所支撑。Sitebricks 模板中的表达式就像 JSP 那样简洁,但却通过一个类型推断算法进行静态的类型检查。它甚至还使用了鸭子类型,保证了静态安全。 另一个核心原则就是速度:不仅仅是性能,还有开发者的效率。Sitebricks 的生命周期与 HTTP 别无两样,每个页面都是一个常规的 Java POJO 再加上一个前端的 HTML 模板。其他框架中的“客户化”组件通常都需要大量额外的配置及支持类。在 Sitebricks 中,模板系统的本性使得客户化可重用的页面片段与常规的页面没有什么差别。

最后,我想说的是 Sitebricks 直接构建在 Guice 之上。这是我们从一开始就遵循的核心设计原则,这样 Sitebricks 就与完整的 DI 系统紧密结合起来了,从而无需像其他框架那样还要花费很大气力才能利用到 DI 的优势。

InfoQ:要想使用 Sitebricks 开发 Web 应用都需要哪些步骤、工具以及程序库呢?

Dhanji:基本的做法就是在浏览器中运行 HTML 页面,然后不断编辑它,再来查看效果。无需任何特别的工具来设计页面或是组件。你可以在任何 Servlet 容器中运行 Sitebricks 并遍历页面(称作 brick)或是更大的组合页面中的片段。 就像 Guice 一样,Sitebricks 遵循这样一种思想:类型安全与早期的错误检测对开发者是大有裨益的。不仅验证对象以保证 DI 依赖(通过 Guice 及内建的 Guice Servlet)的正确性,而且还对页面中的表达式进行静态的类型检查使之符合相应的页面类。在 Red Hat 王牌工程师 Mike Brock 的帮助下,我对优秀的表达式语言 MVEL( http://mvel.codehaus.org )进行了扩展以使用类型推断算法,这保证了 JSP 风格表达式的简洁性,同时又提供了 Java 编译器丰富的错误检测功能。

我们的目标就是无需任何特别的工具就能获得最大的收益(甚至都不需要 IDE)。MVEL 要比 JSP EL 快一个数量级,比大多数其他的 EL 快好几倍。

除此之外,Sitebricks 还会加载对 HTML 模板的静态分析,确保表单参数匹配构建目标、action URL 并执行其他一整套检测。当然了,这只是冰山一角而已,我们还有很多工作要做。

InfoQ:Sitebricks 能否集成其他一些流行的 Web 技术比如 GWT、能否在客户端集成 JavaScript 工具、能否集成 Hibernate 及其他持久化框架?

Dhanji:目前你可以在 Sitebricks 页面上使用任何 javascript 框架并将其嵌入到其他 Sitebricks 页面上作为组合片段或是“brick”。Sitebricks 会处理好这一切并将 CSS、Javascript 及其他资源正确地重写到标签内,这意味着你可以通过简单的注解来嵌入任何信息。凭借这一点,开发者可以将任何 Web 页面包装起来并作为一个可重用的组合单元插入到其他页面中,该特性非常棒。你还可以通过 Sitebricks 将 XML 和 JSON 传递到 GWT 应用中,就像任何其他的客户端服务一样。 目前我们正致力于以 comet 风格来集成 GWT,这样 Sitebricks 就可以轻松作为后端来支持长时间运行、双向的 GWT 应用了。

由于 Sitebricks 构建在 Guice 之上,因此用户可以充分利用我们所提供的与各种框架和程序库的集成。Warp-persist( http://www.wideplay.com )是一个针对 JPA、Hibernate 和 db4objects 的薄薄且又简单的集成层,用户可以通过它在任何 Guice 应用中轻松实现持久化和事务操作。它还具有丰富的类型安全以及自动化查询等特性。现在很多组织与个人都在使用 Warp-persist,其中包括 Google 内部的一些项目。

Guice 的 Servlet 模块也内置于 Sitebricks 之中,这能够帮助应用消除繁琐的 web.xml 配置。

InfoQ:好像 Google Wave Federation Prototype Server 使用了 Sitebricks,它真的用在该服务器中了么?你是否打算将其用在更多的 Google 项目中呢?

Dhanji:你消息很灵通啊!事实上,Sitebricks 并没有用在 Google Wave 参考实现中。在我建立 Federation 项目的构建配置时,我使用了 Sitebricks 的 ant 脚本作为模板,因此在一些示例中留有一些注释。然而我曾与一些团队讨论过将 Sitebricks 用在 Google Wave 的其他系统中,我相信当其稳定时会派上用场的。我曾与 Google 一些工程师谈论过 Sitebricks,他们都对其表示出了极大的兴趣,但现在说这些还有些为时过早,一切都要等到代码成熟稳定时才能做出决定。

InfoQ:这个世界上并不存在万能的框架,那么你认为哪些 Web 应用最能从 Sitebricks 上获益,哪些情况下不应该使用 Sitebricks 呢?

Dhanji:问的好。Sitebricks 适合于当今大多数具有如下特点的站点:其 HTML 页面具有大量文本内容和一些组件,而这些组件是通过 Javascript 以交互的方式插入或是修改的。 一开始,你可能会觉得像 Google Wave 这样使用了大量 Ajax 的应用并不会从 Sitebricks 中获得多少好处,但在看过其 RPC 层之后,你就会发现 Sitebricks 的 RESTful Web Services API 非常适合于为 GWT 应用直接传输 JSON 或是 XML。同时,我们还发现相对于从 JSON 或是 GWT-RPC 转换来说,预先渲染的 HTML 片段可以极大地提升性能,而 Sitebricks 非常适合于这一点。

最后,我们还通过快速的序列化在 Sitebricks 中实现健壮的 HTTP(RESTful)Web Services,同时捆绑了一个简单的 HTTP 客户端 API,这意味着同样的 Sitebricks jar 可以用在 Web Services 远程设施的两端。为了做到这一点,我们针对 MVEL 进行了 MVBus 扩展,这与传统的程序库如 XStream 相比,性能提升了一个数量级。

InfoQ:Sitebricks 大概的一个发布计划是怎么样的,采取什么协议呢?

Dhanji:Sitebricks 目前采取的是 Apache Software License 2.0,现在还处在 alpha 阶段,可以通过 http://code.google.com/p/google-sitebricks 获取。 大家可以通过 twitter 直接给我发消息或是在 http://twitter.com/dhanji 上给我留言。

大家可以通过 Google Sitebricks 的项目主页邮件列表或是 Dhanji 在今年 JavaOne 上的演讲材料中了解到关于 Sitebricks 的更多信息。

Dhanji 还是 Dependency Injection 一书的作者, InfoQ 此前曾对该书进行过报道,该书的最后一章介绍了如何通过 Google Sitebricks 构建完整的 Web 应用。

大家可以查看 InfoQ 上关于 Frameworks Google Guice 以及 Google Wave 的文章进行延伸阅读。

查看英文原文: Google Sitebricks Web Framework - Q&A with Dhanji Prasanna

2009-10-11 13:081560
用户头像

发布了 88 篇内容, 共 268.8 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

BOE(京东方)2024年一季度净利润预计8亿元-10亿元,三位数增长叩响高质量发展“开门红”

科技热闻

TiProxy 问题解答 & 未来规划

TiDB 社区干货传送门

新版本/特性发布 新版本/特性解读 数据库连接 8.x 实践

HTML API 设计指南:打造高效、可维护的接口

Apifox

JavaScript html 程序员 前端 HTML API

前端代码规范 - 图片相关

南城FE

前端 代码规范 图片优化

OpenHarmony 4.1 Release版本正式发布,邀您体验

OpenHarmony开发者

Open Harmony

实用技巧:排查数据异常/数据波动问题,该如何下手?

feng

大数据 分布式 后端

写给职场新人|从迷茫到屡获殊荣的技术人成长之路

京东零售技术

人工智能 架构 后端 技术成长 企业号 4 月 PK 榜

解锁阿里巴巴1688数据宝藏:API助力批量获取商品价格、标题、图片及库存

技术冰糖葫芦

API boy api 货币化 pinduoduo API

即时通讯技术文集(第36期):《跟着源码学IM》系列专题 [共12篇]

JackJiang

即时通讯;IM;网络编程

20个Python 正则表达式应用与技巧

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号2024年4月PK榜

百度官方!打造「大模型全开发周期系列课程」,AI应用开发入门课率先发布!(内含英雄帖)

飞桨PaddlePaddle

百度 开发者 BAIDU 百度飞桨 飞桨星河社区

实况窗助力美团打造鸿蒙原生外卖新体验,用户可实时掌握外卖进展

HarmonyOS开发者

HarmonyOS

华大北斗芯片再登纽伦堡国际嵌入式展EW2024

江湖老铁

基于香橙派AIpro将开源框架模型转换为昇腾模型

华为云开发者联盟

华为云 昇腾 华为云开发者联盟 企业号2024年4月PK榜 香橙派AIpro

新质生产力与智能制造:推动制造业转型升级的双引擎

天津汇柏科技有限公司

智能制造 新质生产力

“大模型驱动的软件研发” 华为云助推企业研发智能化升级

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟 企业号2024年4月PK榜

tidb 6.1.4 table cache 导致的集群QPS异常问题

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 6.x 实践

程序员精选常用ChatGPT提示词合集

蓉蓉

openai ChatGPT GPT-4

LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式

LigaAI

人工智能 DevOps 极狐GitLab LigaAI 研发效能管理

碳视野 | 今后五年国家重点支持三类双碳项目!

AMT企源

数字化转型 双碳 碳管理

✅实现百万级数据从Excel导入到数据库的方式

派大星

数据导入 Java 面试题 互联网大厂面试 百万数据

从人力外包到测试工具与平台:打造完整的测试解决方案

霍格沃兹测试开发学社

火山引擎 VeDI:剪映产品如何应用A/B测试验证新功能效果

字节跳动数据平台

大数据 A/B测试 企业号 4 月 PK 榜 对比试验 数字化增长

DCDN连接云和用户:加速企业全球拓展之旅

MasterInTech

阿里云 CDN

NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解

汀丶人工智能

自然语言处理 大语言模型 NL2SQL

哔哩哔哩游戏宣布《碧蓝航线》将启动鸿蒙原生应用开发

最新动态

利用Python实现数据可视化

技术冰糖葫芦

API Explorer API boy api 货币化

Dhanji Prasanna谈Google Sitebricks Web Framework_Java_Dio Synodinos_InfoQ精选文章