领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多在SpringOne2gx大会上,我们宣布了在社交媒体和移动应用开发领域令人兴奋的新计划。几周前,Craig Walls 发布了Spring Social。今天,Roy Clarkson 发布了Spring Mobile和Spring Android。在这篇文章中,我想重点介绍这些项目,并分享Spring如何简化移动应用开发。
如果您今年参加了SpringOne2gx,您已经看到了Greenhouse,这是我们为社区构建的一个应用程序,它也作为Spring技术的参考和驱动程序。Craig 向您展示了Greenhouse的一些社交元素,例如将您的帐户连接到Twitter和Facebook的功能。还有一些移动元素。具体来说,Greenhouse同时作为一个移动Web应用程序,并拥有原生的Greenhouse for iPhone和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媒体查询和JavaScript执行客户端检测。这种方法的优点是不需要特殊的服务器端处理,除非您打算改变发送到设备的语义内容,而不仅仅是优化样式。并非所有浏览器都支持媒体查询,因此它们可能不是您的选择,但如果您以基于WebKit的浏览器为目标的智能手机,那么您应该没问题。总的来说,首先为移动设备设计应用程序,然后逐步增强桌面设备的体验的方法对我来说感觉非常优雅。
对于Android客户端,出现了一系列不同的挑战。我们需要通过REST通过HTTPS与服务器交换数据,并且由于这些数据是特定于用户的,因此我们需要用户登录。我们选择使用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");
在未来的里程碑版本中,您可以期待在Android环境中支持更多Spring Framework,例如Spring Security OAuth客户端。
最好的入门方法是亲身体验,在您自己的本地开发环境中浏览Greenhouse应用程序。作为参考,Greenhouse使用Spring Mobile和Spring Android项目,以及Spring MVC、Security、Social和Integration。该项目页面提供了一个指南,向您展示如何在几分钟内在本地环境中运行Web应用程序、iPhone客户端和Android客户端。
如果您对功能、路线图有任何疑问,或者只想与开发团队进行讨论,请访问我们的社区论坛。我们重视您的反馈。
我对我们正在进行的所有新计划都感到非常兴奋,特别是我们在社交和移动领域所做的工作。这些项目的第一个里程碑仅仅是一个开始。我鼓励您参与对您有用的项目,并帮助我们使它们尽善尽美。