wurfl_比较OpenDDR与WURFL
wurfl
量身定制的Web內容通常受益于定制,以考慮多種因素,例如屏幕大小,標記語言支持和圖像格式支持。 此類信息存儲在“設備描述存儲庫”(DDR)中。WURFL和OpenDDR項目都提供了訪問DDR的API,以簡化并促進適應其交付上下文的Web內容的開發。
WURFL最近將其許可證更改為AGPL(Affero GPL)v3 。 這就意味著它不再是免費的商業用途。 因此,最近開始出現了一些免費的開源替代方案。 OpenDDR就是其中之一。
在本文中,我將分享有關OpenDDR Java API與WURFL相比的發現。
向項目添加依賴項
本節介紹如何將WURFL和OpenDDR添加到Maven項目。 伍爾夫
WURFL非常簡單,因為它在Maven中央存儲庫中可用。 您要做的就是將對項目的依賴包括在內:
<dependency><groupId>net.sourceforge.wurfl</groupId><artifactId>wurfl</artifactId><version>1.2.2</version><!-- the last free version --> </dependency>開放DDR
另一方面,OpenDDR很難配置。 請按照以下步驟在您的項目中包括OpenDDR:
加載存儲庫/功能文件
本節介紹如何加載WURFL和OpenDDR存儲庫文件并將其導入項目中。 伍爾夫
將wurfl-2.1.1.xml.gz文件(最新的免費版本)復制到您的項目src/main/resources文件夾中,然后使用以下命令導入:
WURFLHolder wurflHolder = new CustomWURFLHolder(getClass().getResource("/wurfl-2.1.1.xml.gz").toString());開放DDR
將oddr.properties -Simple-API src文件夾中的oddr.properties和OpenDDR-Simple-API resources文件夾中的所有文件復制到項目src/main/resources文件夾中。 使用以下命令導入它們:
Service identificationService = null; try {Properties initializationProperties = new Properties();initializationProperties.load(getClass().getResourceAsStream("/oddr.properties"));identificationService = ServiceFactory.newService("org.openddr.simpleapi.oddr.ODDRService",initializationProperties.getProperty(ODDRService.ODDR_VOCABULARY_IRI),initializationProperties); } catch (IOException e) {LOGGER.error(e.getMessage(), e); } catch (InitializationException e) {LOGGER.error(e.getMessage(), e); } catch (NameException e) {LOGGER.error(e.getMessage(), e); }使用API
本節介紹如何使用WURFL和OpenDDR Java API訪問設備功能。 伍爾夫
WURFL API非常易于使用,并且具有一個后備層次結構,可以為尚未在其存儲庫文件中的設備提供推斷功能,這是其一大優勢。
Device device = wurflHolder.getWURFLManager().getDeviceForRequest(getContext().getRequest()); int resolutionWidth = Integer.valueOf(device.getCapability("resolution_width")); int resolutionHeight = Integer.valueOf(device.getCapability("resolution_height"));當沒有可用數據時,無需針對null值驗證device.getCapability("resolution_width") 。
開放DDR
OpenDDR恰恰相反。 非常麻煩并且沒有回退層次結構,這迫使開發人員驗證每個屬性值。
PropertyRef displayWidthRef; PropertyRef displayHeightRef;try {displayWidthRef = identificationService.newPropertyRef("displayWidth");displayHeightRef = identificationService.newPropertyRef("displayHeight"); } catch (NameException ex) {throw new RuntimeException(ex); }PropertyRef[] propertyRefs = new PropertyRef[] { displayWidthRef, displayHeightRef }; Evidence e = new ODDRHTTPEvidence(); e.put("User-Agent", getContext().getRequest().getHeader("User-Agent"));int maxImageWidth = 320; // A default value int maxImageHeight = 480; // A default value try {PropertyValues propertyValues = identificationService.getPropertyValues(e, propertyRefs);PropertyValue displayWidth = propertyValues.getValue(displayWidthRef);PropertyValue displayHeight = propertyValues.getValue(displayHeightRef);if (displayWidth.exists()) {maxImageWidth = displayWidth.getInteger();}if (displayHeight.exists()) {maxImageHeight = displayHeight.getInteger();} } catch (Exception ex) {throw new RuntimeException(ex); }結果
下表顯示了針對使用WURFL和OpenDDR進行服務器端圖像適配的應用程序運行的測試結果。
這些測試是在真實的設備上執行的,頁面用作XHTML BASIC(與XHTML MP相同)。
| 650 | 640 | 不支持 |
| 600 | 480 | 不支持 |
| 320 | 320 | 320 |
| 480 | 480 | 480 |
| 320 | 540 | 不支持 |
| 400 | 960 | 不支持 |
| 300 | 320 | 320 |
| 460 | 480 | 480 |
| 600 | 640 | 480 |
| 600 | 480 | 800 |
| 228 | 480 | 640 |
| 280 | 640 | 480 |
| 234 | 240 | 240 |
| 280 | 320 | 320 |
| 240 | 240 | 不支持 |
| 280 | 320 | 不支持 |
| 440 | 480 | 480 |
| 700 | 800 | 800 |
(1) max_image_width功能非常方便:
可見(可用)圖像的寬度,以像素表示。 此功能是指在“移動模式”下使用的圖像,即當頁面用作XHTML MP時,或者使用諸如“視口”,“手持式”,“移動優化”之類的元標記來禁用“網頁渲染”和強制移動用戶體驗。
注意:顏色#9f9突出顯示了效果更好的結果。 利弊
|
|
|
|
相關文章
- Eclipse RCP到手機
- Java EE 6測試第二部分– Arquillian和ShrinkWrap簡介
- Java EE 6測試第I部分– EJB 3.1可嵌入API
- 條帶框架XSS攔截器
- Maven 2 Cobertura插件–更新
- 上一篇文章:Java EE 6測試第二部分– Arquillian和ShrinkWrap簡介
參考: 比較我們的JCG合作伙伴 Samuel Santos的設備描述存儲庫 ,位于Samaxes博客上。
翻譯自: https://www.javacodegeeks.com/2012/06/comparing-openddr-to-wurfl.html
wurfl
總結
以上是生活随笔為你收集整理的wurfl_比较OpenDDR与WURFL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓excel软件(安卓excel)
- 下一篇: 少女万华镜安卓版下载(少女万华镜安卓)