目前版本:1.0.0.M3
Spring Mobile是針對Spring MVC的一個擴充,用來給普通的web應用加入mobile通路的支援;
Spring Mobile有三個組成部分:
1.Device resolution(裝置解析)
通過分析請求的headers來決定請求的裝置資訊;
這裡是通過Interceptor在實際處理請求前先以DeviceResolver拿到Device對象,再将其放入請求的attribute中,為随後的Controller/View使用;
通過mvc:argument-resolvers配置,可以将Device對象加入到Controller的方法參數中友善使用
Spring Mobile内置了一種簡單的DeviceResolver(官方文檔提到的另一個WurflDeviceResolver由于license不相容已移除)
LiteDeviceResolver:它隻區分MOBILE和NOT_MOBILE兩種狀态;它的檢測算法:
是否有“x-wap-profile”或"Profile"的header;
“User-Agent”是否以特定的詞為字首;
“Accept”的值中是否包含“wap”;
“User-Agent”是否包含特定的關鍵詞;
所有header名中是否包含有“OperaMini”
2.Site preference management(偏好管理)
有時手機想通路桌面版或者桌面想通路手機版,可以在頁面加上其他版本的連結,不同的版本隻有一個參數不一樣;
site_preference=normal或者site_preference=mobile
同樣會用一個Interceptor處理:
判斷是否有參數指定,
如果沒有會嘗試從cookie中取得;
如果仍沒有就使用上面Device對象的;[這意味着就不用再直接基于上面1中的Device對象判斷]
将結果寫入cookie
同樣也可以配置在Controller方法參數中加入這個SitePreference
3.Site switching(站點切換)
一些站點會為mobile通路提供不同的域名,例如m.google.com,站點切換就是做這個的了:
Spring Mobile提供了兩種替換方式,例如myapp.com可以切換到m.myapp.com或myapp.mobi
實作依然是一個Interceptor,它會首先拿到SitePreference[這意味着不用直接做上面2的判斷]
然後和目前域名比較,不同的話就會拼裝新的URL,然後做重定向.
ps.将Controller常用的對象提取到Interceptor再通過配置為Controller方法參數,是一種便捷的方法,
可以用在登入User等對象上。