量身定制的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:

  1. 下载OpenDDR-Simple-API zip 。
  2. 解压缩它,并根据结果文件夹在Eclipse上创建一个新的Java项目。
  3. 使用Eclipse File >> Export...导出OpenDDR-Simple-API JAR,仅包括src文件夹中的内容,不包括oddr.properties文件。
  4. lib文件夹中的结果JAR和DDR-Simple-API.jar安装到本地Maven存储库中
    mvn install:install-file -DgroupId=org.w3c.ddr.simple -DartifactId=DDR-Simple-API -Dversion=2008-03-30 -Dpackaging=jar -Dfile=DDR-Simple-API.jar -DgeneratePom=true -DcreateChecksum=true
    mvn install:install-file -DgroupId=org.openddr.simpleapi.oddr -DartifactId=OpenDDR -Dversion=1.0.0.6 -Dpackaging=jar -Dfile=OpenDDR-1.0.0.6.jar -DgeneratePom=true -DcreateChecksum=true
  5. 将依赖项添加到您的项目pom.xml文件中:
    <dependency><groupId>org.w3c.ddr.simple</groupId><artifactId>DDR-Simple-API</artifactId><version>2008-03-30</version>
    </dependency>
    <dependency><groupId>org.openddr.simpleapi.oddr</groupId><artifactId>OpenDDR</artifactId><version>1.0.0.6</version>
    </dependency>
    <dependency><groupId>org.apache.commons</groupId><artifactId>commons-jexl</artifactId><version>2.1.1</version>
    </dependency>
    <dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version>
    </dependency>

加载存储库/功能文件

本节介绍如何加载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相同)。

平台 设备 属性 WURFL max_image_width (1) / max_image_height WURFL resolution_width / resolution_height OpenDDR显示displayWidth /显示displayHeight
不适用 Firefox桌面 宽度 650 640 不支持
高度 600 480 不支持
的iOS iPhone 4S 宽度 320 320 320
高度 480 480 480
安卓系统 HTC One V 宽度 320 540 不支持
高度 400 960 不支持
HTC英雄 宽度 300 320 320
高度 460 480 480
Windows Phone 7.5 诺基亚Lumia 710 宽度 600 640 480
高度 600 480 800
黑莓 黑莓Bold 9900 宽度 228 480 640
高度 280 640 480
塞班S60 诺基亚E52(Webkit) 宽度 234 240 240
高度 280 320 320
诺基亚E52(Opera Mobile) 宽度 240 240 不支持
高度 280 320 不支持
Windows Mobile 6.1 HTC Touch HD T8282 宽度 440 480 480
高度 700 800 800

(1) max_image_width功能非常方便:

可见(可用)图像的宽度,以像素为单位。 此功能指的是在“移动模式”下使用的图像,即当页面用作XHTML MP时,或者使用诸如“视口”,“手持式”,“移动优化”之类的元标记来禁用“网页渲染”和强制移动用户体验。

注意:颜色#9f9突出显示了效果更好的结果。 利弊

优点 缺点
伍尔夫
  • 设备层次结构很可能会正确推断出功能的值,即使尚未识别该设备也是如此。
  • 很多很多的功能 。
  • 易于配置。
  • 清洁器API。
  • 定价与许可 。
开放DDR
  • 免费使用,甚至用于商业用途。
  • 不断增长的社区。
  • 功能有限。 OpenDDR似乎仅限于W3C DDR核心词汇表 。

相关文章

  • 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

比较OpenDDR和WURFL相关推荐

  1. wurfl_比较OpenDDR与WURFL

    wurfl 量身定制的Web内容通常受益于定制,以考虑多种因素,例如屏幕大小,标记语言支持和图像格式支持. 此类信息存储在"设备描述存储库"(DDR)中. WURFL和OpenDD ...

  2. shrinkwrap_Java EE 6测试第二部分– Arquillian和ShrinkWrap简介

    shrinkwrap 在Java EE 6测试的第一部分中,我简要介绍了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API,以演示如何启动该容器,如何在项目类路径中查找be ...

  3. Java EE 6测试第二部分– Arquillian和ShrinkWrap简介

    在Java EE 6测试的第一部分中,我简要介绍了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API,以演示如何启动该容器,如何在项目类路径中查找bean以及运行非常简单的 ...

  4. 用户体验改善案例_如何检测用户的设备,以便改善他们的用户体验

    用户体验改善案例 A few months ago I watched a great talk from the Chrome Dev Summit about performance in slo ...

  5. 我开源的软件只能我拿来赚钱

    文 | 一君 出品 | OSC开源社区(ID:oschina2013) 贵司为 MySQL 掏过钱吗?或者说,你使用的是 MySQL Enterprise Edition 类的产品还是 MySQL C ...

  6. 【ICCV2019】完整论文列表

    ICCV2019完整论文清单,共1075篇. FaceForensics++: Learning to Detect Manipulated Facial Images Authors:Andreas ...

  7. 探索移动Web网页编码设计

    如果你正准备为你的网站制作一个移动设备版本,那这篇文章将会对你相当有用,在本文中,将探索移动Web网页编码设计的各种技巧和注意事项: 为了移动设备上的用户体验可以被接受,代码得怎么设计. Mobile ...

  8. HTML5开发手机项目总结

    http://blog.csdn.net/yual365/article/details/12612789 让网页的宽度自适应屏幕<meta name="viewport"  ...

  9. 手机网站开发的经验总结

    手机版网站起码要实现一些基本的功能吧:  1.页面的适用性问题.对于移动终端,有不一样的分辨率与屏幕尺寸,如果还像电脑端的设计还限制网页的宽度为1003px或其他像素值,字体大小还用12px或14px ...

最新文章

  1. App Store兼容性问题
  2. sourcetree 回滚
  3. 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
  4. 2020年二级计算机考试真题,2020年3月计算机等级考试《二级MS Office高级应用》历年真题-试题答案...
  5. Python菜鸟之路:原生Ajax/Jquery Ajax/IFrame Ajax的选用
  6. 关于变量声明的var,let,const
  7. windows电脑快捷键大全 - 高手总是很酷的
  8. qt编写网易云界面(1)----标题框的实现
  9. MySql根据字段名查询重复记录并删除!只保留一条
  10. 微信存储空间占用问题
  11. linux系统有线网卡,Thinkpad E430+CentOS 6.4+ linux-3.10.12内核网卡驱动(无线+有线)配置...
  12. Develop -- Training(十五) -- 显示高效位图
  13. 如何修复老照片,Bringing-Old-Photos-Back-to-Life机器学习开源项目安装使用 | 机器学习
  14. 机器学习——支持向量机support vector machine
  15. 一步步使用SpringBoot结合Vue实现登录和用户管理功能
  16. 数据结构与算法——6. 抽象数据类型:无序表与有序表及其链表实现
  17. 云呐|什么是动环监控?动环监控系统的监控对象有哪些?
  18. 一、Spark内核之运行机制
  19. C++中如何判断两个字符串数组是否相等
  20. 细粒度图像分类 fine-grained classification

热门文章

  1. linux-basic(11)认识和学习bash
  2. 程序员面试算法_程序员的前20个搜索和排序算法面试问题
  3. raid重构原理_5个重构原理示例
  4. inmemory_通过Spring Boot了解H2 InMemory数据库
  5. java 集成开发工具_最好的Java开发人员测试和集成工具
  6. java分布式系统开发_从微服务到分布式系统-Java开发人员生存指南
  7. java 多线程变量可见性_Java多线程:易变变量,事前关联和内存一致性
  8. 对象空指针_可选和对象:空指针救星!
  9. AWS上的应用程序自动扩展–选项及其对性能的影响
  10. 穹顶灯打不出阴暗面_Java 8星期五:Java 8的阴暗面