抢先一步
VMware 提供培训和认证,助您加速进步。
了解更多在 SpringOne2gx 大会上,我们宣布了社交媒体和移动应用开发领域令人兴奋的新举措。几周前,Craig Walls 发布了 Spring Social。今天,Roy Clarkson 发布了 Spring Mobile 和 Spring Android。在这篇文章中,我想重点介绍这些项目,并分享 Spring 如何旨在简化移动应用开发。
如果您参加了今年的 SpringOne2gx 大会,您一定见过 Greenhouse,这是一个我们为社区构建的应用程序,同时也是 Spring 技术的参考和驱动。Craig 向您展示了 Greenhouse 的一些社交元素,例如将您的帐户连接到 Twitter 和 Facebook 的能力。此外,还有许多移动元素。具体来说,Greenhouse 可以兼作移动 Web 应用,并拥有原生的 iPhone 版 Greenhouse 和 Android 客户端。
就像当今的许多组织一样,我们必须回答“要瞄准哪些移动平台?”这个基本问题。最终,我们选择投资于 iPhone 和 Android 用户的原生体验,同时还开发了一个跨平台的移动 Web 应用。我们选择原生开发是基于应用程序是面向消费者的事实,而且大量潜在消费者(应用程序开发者)拥有 iPhone 和 Android 设备。与此同时,移动 Web 应用旨在提供一个可在跨平台工作的良好基础体验,这在 WebKit 和 HTML 5 兴起的今天成为可能。
从我们的开发工作中,诞生了对 Spring Framework 的贡献:首先是 Spring Mobile 项目,它为开发移动 Web 应用提供了对 Spring MVC 的扩展;其次是 Spring Android 项目,它支持开发与基于 Spring 的后端通信的原生 Android 客户端。我将依次介绍这些项目。
在 Greenhouse 中,我们从服务器端检测开始。具体来说,我们的目标是在设备是移动设备时应用不同的页面布局。由此诞生了通用的“设备解析器抽象”,这是 Spring Mobile 1.0.0.M1 的核心特性。该特性的一些亮点包括:
<interceptors>
<!-- On pre-handle, detect the device that originated the web request -->
<beans:bean class="org.springframework.mobile.device.mvc.DeviceResolvingHandlerInterceptor" />
</interceptors>
现在,一个 JSP 模板,如果设备不是移动设备,则有条件地渲染某些内容:
Please try again<c:if test="${!currentDevice.mobile}"> or <a href="<c:url value="/signup" />">sign up</a></c:if>.
最后,一个基于 Tiles 的页面布局,如果设备是移动设备,则会改变:
<definition name="page" templateExpression="/WEB-INF/layouts/${currentDevice.mobile ? 'mobile/' : 'standard/'}page.jsp" />
除了这些特性,Spring Mobile 1.0.0.M1 还包含:
最近,我们也开始探索结合 CSS 3 Media Queries 与 JavaScript 进行客户端检测。这种方法的优点是不需要特殊的服务器端处理,除非您打算改变发送给设备的语义内容,而不仅仅是优化样式。并非所有浏览器都支持 Media Queries,所以这可能不是您的选择,但如果您目标用户是使用基于 WebKit 的浏览器的智能手机,您应该没问题。总的来说,先为移动端设计应用,然后逐步增强以适应桌面端的方法对我来说感觉相当优雅。
对于 Android 客户端,出现了一系列不同的挑战。我们需要通过 HTTPS 经由 REST 与服务器交换数据,并且由于这些数据是用户特定的,我们需要用户登录。我们没有使用 Basic Auth(这将需要我们将用户名和密码凭证存储在设备本身),而是选择了 OAuth。
OAuth 是一个新兴标准,提供基于令牌的授权方案。本质上,用户名和密码被换取一个访问令牌,而访问令牌用于请求受保护的资源。这意味着您只需在设备上存储访问令牌即可实现“记住我”功能。此外,我们选择实施登录过程,客户端将您带到服务器的网站进行连接授权。这样,客户端永远不会看到您的用户名和密码,这对于允许第三方客户端针对您的 API 进行开发(这也是我们想要鼓励的)非常重要。最后,如果用户的手机被盗或以其他方式被入侵,可以使访问令牌无效,而不会有用户名和密码泄露的风险。
从这项工作中,我们产生了在 Android 环境中让 Spring Framework 的特定模块工作的愿望。具体来说,我们的目标是使用 RestTemplate 进行 REST API 调用,以及使用 Spring Security 作为 OAuth 客户端。
我很高兴地宣布,Spring Android 的第一个里程碑版本提供了一个“Android 就绪”的 RestTemplate。我们在 Greenhouse 中正在使用它,并鼓励您在自己的 Android 应用程序中将其用作 REST 客户端。请查看下面的示例用法:
RestTemplate restTemplate = new RestTemplate(new CommonsClientHttpRequestFactory());
Event event = restTemplate.getForObject("https://myapp.com/event/{name}", Event.class, "springone2gx");
在未来的里程碑版本中,您可以期待 Spring Framework 的更多功能在 Android 环境中得到支持,例如 Spring Security OAuth 客户端。
最好的入门方法是亲身体验 Greenhouse 应用程序,在您自己的本地开发环境中运行它。作为参考,Greenhouse 使用了 Spring Mobile 和 Spring Android 项目,以及 Spring MVC、Security、Social 和 Integration。其项目页面提供了指南,向您展示如何在几分钟内让 Web 应用程序、iPhone 客户端和 Android 客户端都在您的本地环境中运行起来。
如果您对功能、路线图有疑问,或者只想与开发团队进行讨论,请访问我们的社区论坛。我们非常重视您的反馈。
我对我们正在进行的所有新举措感到非常兴奋,特别是我们在社交和移动领域所做的一切。这些项目的第一个里程碑仅仅是个开始。我鼓励您参与对您有用的项目,并帮助我们使其尽可能做到最好。