溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Spring Mobile怎么探測(cè)客戶(hù)端設(shè)備和系統(tǒng)

發(fā)布時(shí)間:2021-12-02 16:34:38 來(lái)源:億速云 閱讀:143 作者:柒染 欄目:大數(shù)據(jù)

Spring Mobile怎么探測(cè)客戶(hù)端設(shè)備和系統(tǒng),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

今天閑來(lái)無(wú)事,瀏覽Spring的官方網(wǎng)站,發(fā)現(xiàn)了Spring Mobile項(xiàng)目,之前也看到過(guò),還以為是針對(duì)手機(jī)端的項(xiàng)目,并沒(méi)有細(xì)看。今天仔細(xì)看了一下,原來(lái)是可以探測(cè)請(qǐng)求端的設(shè)備和系統(tǒng)。比如是手機(jī)、平板、還是正常的PC網(wǎng)站。它是Spring MVC的擴(kuò)展,主要的目的是簡(jiǎn)化手機(jī)web應(yīng)用的開(kāi)發(fā)。

  它的主要特點(diǎn)是:

  • 在服務(wù)端探測(cè)發(fā)起請(qǐng)求的設(shè)備,手機(jī)或平板等。

  • 管理站點(diǎn),統(tǒng)計(jì)每個(gè)用戶(hù)的偏好。

  • 根據(jù)請(qǐng)求設(shè)備的不同,返回適合該設(shè)備的視圖

   具體的在項(xiàng)目中使用也非常的簡(jiǎn)單,例如我們使用Spring Boot搭建項(xiàng)目,然后引入Spring Mobile的starter,如下:

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

然后在application.properties文件中將sitepreference打開(kāi),如下:

spring.mobile.sitepreference.enabled=true

Spring Boot自動(dòng)注入了3個(gè)類(lèi),DeviceResolverHandlerInterceptor,SitePreferenceHandlerInterceptor和SitePreferenceMethodArgumentResolver。DeviceResolverHandlerInterceptor是HandlerInterceptor的一個(gè)實(shí)現(xiàn),從名字來(lái)看,它攔截到應(yīng)用的請(qǐng)求,判斷發(fā)送請(qǐng)求設(shè)備的類(lèi)型。當(dāng)設(shè)備解決以后,SitePreferenceMethodArgumentResolver允許SpringMVC在Controller中使用SitePreference實(shí)體。在內(nèi)部,DeviceResolverHandlerInterceptor判斷請(qǐng)求頭中的User-Agent,基于請(qǐng)求頭中的值,判斷請(qǐng)求是否來(lái)自瀏覽器(桌面)、手機(jī)、還是Pad。

  SitePreferenceHandlerInterceptor利用探測(cè)到的設(shè)備,判斷用戶(hù)的初始站點(diǎn)偏好。如果用戶(hù)喜歡另一個(gè)站點(diǎn),則選擇該站點(diǎn),并在隨后的請(qǐng)求中使用,以覆蓋已解析的設(shè)備值。站點(diǎn)偏好是通過(guò)請(qǐng)求中特殊的查詢(xún)字符串設(shè)置的。一旦接收到,偏好將被持久化到cookie中,以供將來(lái)參考。站點(diǎn)偏好功能在Spring Boot中默認(rèn)是打開(kāi)的,可以通過(guò)上面的設(shè)置關(guān)閉它。

  這樣我們就可以使用Spring Mobile了,我們?cè)贑ontroller中加了如下代碼:

@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;  }

  運(yùn)行后,后臺(tái)打印出的值如下:

site.isMobile:truesite.isTablet:falsesite.isNormal:falsedevice.isMobile:truedevice.isTablet:falsedevice.isNormal:falsedevice.Platform:ANDROIDsite.name:MOBILE
測(cè)試時(shí),我們可以通過(guò)瀏覽器的調(diào)試功能(F12),模擬不同的設(shè)備。這樣我們就可以捕獲到前端的設(shè)備類(lèi)型了。

  我們?cè)陂_(kāi)發(fā)時(shí),可能針對(duì)不同的設(shè)備做不同的適配頁(yè)面。Spring Mobile也為我們提供了非常強(qiáng)大的視圖代理解析功能。我們只需要在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=

  我們將代理解析器打開(kāi),并配置3中設(shè)備類(lèi)型的前綴和后綴。后6項(xiàng)也可以不配置,默認(rèn)的3中類(lèi)型的后綴都沒(méi)有,前綴手機(jī)類(lèi)型的是/mobile,平板類(lèi)型的是/tablet。瀏覽器是沒(méi)有前綴的,然后將3中視圖放在相應(yīng)的目錄中,代碼如下:

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

  頁(yè)面如下:

Spring Mobile怎么探測(cè)客戶(hù)端設(shè)備和系統(tǒng)

  這樣,3個(gè)不同的設(shè)備就會(huì)訪(fǎng)問(wèn)不同的頁(yè)面,很方便吧。

關(guān)于Spring Mobile怎么探測(cè)客戶(hù)端設(shè)備和系統(tǒng)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI