能够检测多种设备类型的Spring Mobile
来源:互联网 发布:c语言翻译软件 编辑:程序博客网 时间:2024/06/05 09:50
Spring Moblie是什么?
SpringMoblie是SpringMvc的一个扩展项目,它旨在简化移动web应用程序的开发。 开源地址为 https://github.com/spring-projects/spring-mobile
Spring Moblie可以做什么?
它可以检测到访问当前服务器程序的请求是通过什么设备发起的(PC, 平板, 移动手机),并根据访问设备的不同,跳转到与设备相应的view.
Maven地址:
<org.springframework.mobile-version>1.1.3.RELEASE</org.springframework.mobile-version> <!-- spring mobile --> <dependency> <groupId>org.springframework.mobile</groupId> <artifactId>spring-mobile-device</artifactId> <version>${org.springframework.mobile-version}</version> </dependency>
先来看看它最常用的一个接口:
package org.springframework.mobile.device;/** 这个接口用于检测当前请求的设备类型*/public interface Device { /** 该方法用于确定当前客户端请求是否是PC端 */ boolean isNormal(); /** 该方法用于确定当前客户端请求是否是移动设备 如苹果 安卓 */ boolean isMobile(); /** 该方法用于确定当前客户端请求是否是平板设备 如 iPad */ boolean isTablet();}
接着在Springmvc.xml 配置文件中添加 DeviceResolverHandlerInterceptor 拦截器:
<mvc:interceptors> <beans:bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> </mvc:interceptors>
又或者你可以在web.xml中配置Filter:
<filter> <filter-name>deviceResolverRequestFilter</filter-name> <filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class></filter>
以上二种配置任选一种,他们起到的作用是一样的,笔者测试的是第一种,通过mvc 配置拦截器.
配置以上拦截器后你可以这样获取当前请求的设备类型:
Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest)
当然我相信各位更希望它在@Controller(@RestController)的@RequestMapping("/") 中做为一个参数自动传递, 如下面这样:
@RequestMapping(value = "signin", method = RequestMethod.GET) @ResponseBody public String signin(Device device){ if(device.isNormal()){ return "访问设备类型为PC"; } if(device.isMobile()){ return "访问设备类型为移动设备"; } if (device.isTablet()){ return "访问设备类型为平板"; } return null; }
那么你需要配置DeviceWebArgumentResolver像下面这样:
<mvc:annotation-driven> <mvc:argument-resolvers> <beans:bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven>
2. 用户偏好设置和站点管理.
Spring Moblie允许一个用户在应用程序的多个站点进行视图切换,考虑到一种原因,当前用户使用移动UI进行访问,然而他想要访问的内容移动UI并没有提供视图(或功能) 这时就需要进行视图切换.
2.1 通过用户点击来确定用户偏向于访问正常站点还是移动站点:
<a href="${currentUrl}?site_preference=normal">正常站点</a> | <a href="${currentUrl}?site_preference=mobile">移动站点</a>
2.2点击之后,Spring Moblie会把用户偏好选项存到Cookie里面,通过CookieSitePreferenceRepository类,当然你也可以自己存到Cookie里面或另行处理
2.3 配置拦截器SitePreferenceHandlerInterceptor:
<mvc:interceptors> <beans:bean class="org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor" /></mvc:interceptors>默认情况下SitePreferenceHandlerInterceptor会默认通过CookieSitePreferenceRepository将用户选项存入Cookie
以下是SitePreferenceHandlerInterceptor代码,其中默认的构造函数会创建一个CookieSitePreferenceRepository,而CookieSitePreferenceRepository中的构造函数
会setCookieName将用户选项存入Cookie, 当然你可以插入另外一个Site偏好处理程序.
2.4 通过以上配置,可以通过以下代码或者用户首选项:
SitePreference sitePreference = SitePreferenceUtils.getCurrentSitePreference(servletRequest);
2.5 如果你想通过@Controller(@RestController)的@RequestMapping("/") 中做为一个参数自动传递,那么你需要和上面一样配置:
<mvc:annotation-driven> <mvc:argument-resolvers> <beans:bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" /> </mvc:argument-resolvers></mvc:annotation-driven>
接着使用如下代码:
@RequestMapping(value = "signin", method = RequestMethod.GET) public String signin(SitePreference site){ if(site==SitePreference.MOBILE){ return "为用户准备移动视图进行渲染"; } if(site==SitePreference.NORMAL){ return "为用户准备PC视图进行渲染"; } if(site==SitePreference.TABLET){ return"为用户准备平板视图进行渲染"; } return null; }
2.6 站点切换
如果你想将移动用户和PC用户放在二个不同的站点进行如PC用户访问 example.com 移动用户访问example.app.com 那么可以进行如下配置进行站点切换:
<mvc:interceptors> <beans:bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> <beans:bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="mDot"> <beans:constructor-arg value="example.app.com" /> </beans:bean></mvc:interceptors>
Spring Mobile会自动帮你进行站点切换,当然你也可以将 factory-method 设置为 " urlPath",那么他将会把移动用户重定向到url地址,像下面这样:
<mvc:interceptors> <beans:bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> <beans:bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="urlPath"> <beans:constructor-arg value="/m" /> </beans:bean></mvc:interceptors>Spring Mobile会帮你重定向到
example.app.com/m你也可以指定根目录在urlPath下面在加一个构造函数即可。 需要注意的是他们都会将设置的值默认注入到Cookie首选项中,并且他们在移动站点和正常站点是共享的。
- 能够检测多种设备类型的Spring Mobile
- Spring Mobile是如何判断访问设备的类型的
- Spring Mobile是如何判断访问设备的类型的
- Spring Mobile是如何判断访问设备的类型的
- Spring之检测设备类型
- JQuery Mobile入门——多种类型的网格布局
- js检测访问设备的类型
- 让多种类型item的Recyclerview能够上拉和下拉刷新--XRefreshView
- 判断PC/Mobile设备类型
- iOS检测设备类型
- JS检测设备类型
- Spring:探测访问网站的设备类型
- 基于Spring的设备类型检查
- 如何检测苹果设备类型
- iOS中如何实现检测苹果设备的类型
- Mobile Detect:移动设备(手机和平板)检测的 PHP 类库
- Spring客户端设备检测识别
- spring mobile 的扩展
- 改善神经网络质量的方式
- Plugin with id 'kotlin-android' not found.
- python编程:从入门到实践 第4章
- 简单使用boost property_tree组件获取配置文件信息
- gulp用例
- 能够检测多种设备类型的Spring Mobile
- python里使用正则表达式的DOTALL标志
- Vue之2.0版本的生命周期
- addChildViewController等方法
- Mysql的安装
- Maven 手动添加 JAR 包到本地仓库
- Deep learning资料
- 一些鬼题(day2上)
- leetcode 51. N-Queens