近日,SpringSource 发布了 Spring Mobile 1.0 。Spring Mobile 包含了 Spring MVC 的扩展,有助于移动 Web 应用的开发。
Spring Mobile 将服务端的开发模式带到了移动 Web 开发上来,它能够在服务器端检测设备并赋予开发者根据设备来处理不同内容的能力。这与 CSS3 Media Queries 和响应式 Web 设计技术形成了对比,后者的检测与渐进增强都是在客户端完成的。
Spring Mobile 具有如下 3 个主要特性。
设备检测
设备检测是分析 HTTP 请求以决定发出请求的设备的过程。这通常是通过检测 User-Agent 头和其他请求头来实现的。在需要区别对待移动与桌面浏览器的场合下这是非常有用的。要想启用设备检测,请在 DispatcherServlet 配置中添加 DeviceResolverHandlerInterceptor。
<mvc:interceptors> <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> </mvc:interceptors>
在默认情况下,LiteDeviceResolver 用于设备检测,它基于 WordPress Mobile Pack 的检测算法。你可以通过注入一个 DeviceResolverHandlerInterceptor 构造参数来插入另一个 DeviceResolver 实现。诸如 WURFL 等更加复杂的设备检测可以识别出具体的设备能力,比如说屏幕尺寸、制造商、型号以及首选标记。
你可以通过调用 DeviceUtils.getCurrentDevice() 获得当前的设备,还可以在配置完 DeviceWebArgumentResolver 之后将当前的 Device 作为参数传递给某个 @Controller 方法。
站点首选项管理
用户可以通过站点首选项管理指出他首选的是移动站点抑或常规站点。Spring Mobile 的实现位于 StandardSitePreferenceHandler 中,它支持基于查询参数的站点首选项标识以及可插拔的 SitePreference 存储。如果用户没有明确指定 SitePreference,那么 Spring Mobile 会根据用户设备使用一个默认值。指定的站点首选项会存储在 SitePreferenceRepository 中,默认实现会在客户端 cookie 中保存首选项。
要想启用站点首选项管理,请在 DispatcherServlet 配置中添加 SitePreferenceHandlerInterceptor。
<mvc:interceptors> <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> <bean class="org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor" /> </mvc:interceptors>
用户可以通过单击某个链接提交 site_preference 查询参数来指定站点首选项。
<a href="?site_preference=normal">Normal</a> | <a href="?site_preference=mobile">Mobile</a>
指定的 SitePreference 作为一个请求属性,其名字为“currentSitePreference”。你还可以在配置完 SitePreferenceWebArgumentResolver 后将当前的 SitePreference 以参数的形式传递给某个 @Controller 方法。
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" /> <bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven>
站点切换
站点切换指的是可以根据设备与指定的站点首选项将用户切换至最适合的站点的能力。目前有 3 个 SiteSwitcher 实现。“mDot”工厂方法会构建一个 SiteSwitcher,它会将移动用户重定向至 m.${DOMAIN}。“dotMobi”工厂方法会构建一个 SiteSwitcher,它会将移动用户重定向至 ${DOMAIN - TLD}.mobi。“urlPath”工厂方法会构建一个 SiteSwitcher,它会将移动用户重定向至 ${DOMAIN}/${MOBILE_PATH}。下面的示例介绍了如何配置 mDot SiteSwitcher。
<mvc:interceptors> <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> <bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="mDot"> <constructor-arg value="domain.com" /> </bean> </mvc:interceptors>
感兴趣的读者可以观看这个 4 分钟的 Spring Mobile视频并阅读 Spring Mobile 参考手册来了解更多信息。要想上手,请下载发布包或是添加 Maven 依赖。
<dependency> <groupId>org.springframework.mobile</groupId> <artifactId>spring-mobile-device</artifactId> <version>1.0.0.RELEASE</version> </dependency>
Spring Mobile示例位于GitHub 上。
查看英文原文: Spring Mobile 1.0 Released
评论