ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Mobile检测多种设备类型

2019-09-09 10:35:47  阅读:226  来源: 互联网

标签:return Mobile Spring 用户 视图 站点 mobile 检测 device


原文链接:https://blog.csdn.net/hellowordapi/article/details/78395295

spring mobile框架是一个很小的,用于获取设备信息,然后跳转到不同视图的框架。

集成方式

一、pring 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首选项中,并且他们在移动站点和正常站点是共享的。

 

 

 

 

 

 

 

 

标签:return,Mobile,Spring,用户,视图,站点,mobile,检测,device
来源: https://blog.csdn.net/Thinkingcao/article/details/100654147

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有