Spring Mobile——探測客戶端設備和系統


Spring Mobile——探測客戶端設備和系統

  今天閑來無事,瀏覽Spring的官方網站,發現了Spring Mobile項目,之前也看到過,還以為是針對手機端的項目,並沒有細看。今天仔細看了一下,原來是可以探測請求端的設備和系統。比如是手機、平板、還是正常的PC網站。它是Spring MVC的擴展,主要的目的是簡化手機web應用的開發。

  它的主要特點是:

  • 在服務端探測發起請求的設備,手機或平板等。
  • 管理站點,統計每個用戶的偏好。
  • 根據請求設備的不同,返回適合該設備的視圖

   具體的在項目中使用也非常的簡單,例如我們使用Spring Boot搭建項目,然后引入Spring Mobile的starter,如下:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mobile</artifactId>
</dependency>

  然后在application.properties文件中將sitepreference打開,如下:

spring.mobile.sitepreference.enabled=true

  Spring Boot自動注入了3個類,DeviceResolverHandlerInterceptor,SitePreferenceHandlerInterceptor和SitePreferenceMethodArgumentResolver。DeviceResolverHandlerInterceptor是HandlerInterceptor的一個實現,從名字來看,它攔截到應用的請求,判斷發送請求設備的類型。當設備解決以后,SitePreferenceMethodArgumentResolver允許SpringMVC在Controller中使用SitePreference實體。在內部,DeviceResolverHandlerInterceptor判斷請求頭中的User-Agent,基於請求頭中的值,判斷請求是否來自瀏覽器(桌面)、手機、還是Pad。

  SitePreferenceHandlerInterceptor利用探測到的設備,判斷用戶的初始站點偏好。如果用戶喜歡另一個站點,則選擇該站點,並在隨后的請求中使用,以覆蓋已解析的設備值。站點偏好是通過請求中特殊的查詢字符串設置的。一旦接收到,偏好將被持久化到cookie中,以供將來參考。站點偏好功能在Spring Boot中默認是打開的,可以通過上面的設置關閉它。

  這樣我們就可以使用Spring Mobile了,我們在Controller中加了如下代碼:

@RequestMapping("index")
    public String index(HttpSession session,Page<User> page,SitePreference site,Device device){
        System.out.println("site.isMobile:"+site.isMobile());
        System.out.println("site.isTablet:"+site.isTablet());
        System.out.println("site.isNormal:"+site.isNormal());

        System.out.println("device.isMobile:"+device.isMobile());
        System.out.println("device.isTablet:"+device.isTablet());
        System.out.println("device.isNormal:"+device.isNormal());

        System.out.println("device.Platform:"+device.getDevicePlatform());
        System.out.println("site.name:"+site.name());

        System.out.println(session.getId());
        return null;
    }

  運行后,后台打印出的值如下:

site.isMobile:true
site.isTablet:false
site.isNormal:false
device.isMobile:true
device.isTablet:false
device.isNormal:false
device.Platform:ANDROID
site.name:MOBILE

  測試時,我們可以通過瀏覽器的調試功能(F12),模擬不同的設備。這樣我們就可以捕獲到前端的設備類型了。

  我們在開發時,可能針對不同的設備做不同的適配頁面。Spring Mobile也為我們提供了非常強大的視圖代理解析功能。我們只需要在applicaton.properties中配置即可。

spring.mobile.devicedelegatingviewresolver.enabled=true
spring.mobile.devicedelegatingviewresolver.mobile-prefix=
spring.mobile.devicedelegatingviewresolver.mobile-suffix=
spring.mobile.devicedelegatingviewresolver.tablet-prefix=
spring.mobile.devicedelegatingviewresolver.tablet-suffix=
spring.mobile.devicedelegatingviewresolver.normal-prefix=
spring.mobile.devicedelegatingviewresolver.normal-suffix=

  我們將代理解析器打開,並配置3中設備類型的前綴和后綴。后6項也可以不配置,默認的3中類型的后綴都沒有,前綴手機類型的是/mobile,平板類型的是/tablet。瀏覽器是沒有前綴的,然后將3中視圖放在相應的目錄中,代碼如下:

@Controller
public class GreetingController {

    @RequestMapping("/greeting")
    public String greeting() {
        return "greeting";
    }

}

  頁面如下:

               

  這樣,3個不同的設備就會訪問不同的頁面,很方便吧。示例代碼在我的GitHub中,https://github.com/bigbugliu/spring-boot-demo。歡迎大家在評論區討論。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM