您好,登錄后才能下訂單哦!
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:truesite.isTablet:falsesite.isNormal:falsedevice.isMobile:truedevice.isTablet:falsedevice.isNormal:falsedevice.Platform:ANDROIDsite.name:MOBILE
測試時,我們可以通過瀏覽器的調試功能(F12),模擬不同的設備。這樣我們就可以捕獲到前端的設備類型了。
我們在開發時,可能針對不同的設備做不同的適配頁面。Spring Mobile也為我們提供了非常強大的視圖代理解析功能。我們只需要在applicaton.properties中配置即可。
spring.mobile.devicedelegatingviewresolver.enabled=truespring.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中視圖放在相應的目錄中,代碼如下:
@Controllerpublic class GreetingController { @RequestMapping("/greeting") public String greeting() { return "greeting"; }}
頁面如下:
這樣,3個不同的設備就會訪問不同的頁面,很方便吧。
關于Spring Mobile怎么探測客戶端設備和系統問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。