Content Table

Spring 判断设备信息

虽然响应式设计现在很流行,设计的好的话同一个页面在桌面设备和移动设备都能显示的很好,但是源码都一样的,也就是说桌面设备和移动设备要下载的文件都是一样大小的,在用户体验,页面显示效果和加载速度上不是非常理想,所以有必要针对移动设备进行优化,例如 jQuery 在移动设备上应该使用 jQuery Mobile,图片进行相应的缩小,很多桌面端的内容不应该出现在移动设备中,例如广告,侧边栏,复杂的搜索,动态获取的第三方信息等。

为了检测页面访问的设备类型,可以使用 Spring Mobile,当然也可以自己读取 User Agent 来判断。

Gradle 依赖

1
compile('org.springframework.mobile:spring-mobile-device:1.1.5.RELEASE')

配置拦截器

1
2
3
<mvc:interceptors>
<bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor"/>
</mvc:interceptors>

配置 annotation-driven

1
2
3
4
5
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>

获取设备类型

1
2
3
4
5
6
7
8
9
10
11
@GetMapping("/device")
@ResponseBody
public String detectDevice(Device device) {
if (device.isMobile()) {
return "Mobile";
} else if (device.isTablet()) {
return "Tablet";
} else {
return "Desktop";
}
}

访问同一个 URL,对于不同的设备,返回不同的 View,针对设备进行代码优化,例如

1
2
3
4
5
6
7
8
@GetMapping("/help")
public String help(Device device) {
if (device.isMobile()) {
return "m_help.html";
} else {
return "help.html";
}
}

如果要考虑 SEO 的话,那就同一个页面不同的设备使用不同的代码,并且 URL 也不一样,例如 http://www.xtuer.com/helphttp://www.xtuer.com/m/help

参考文档