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:

  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

wurfl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm 静态资源处理器

ssm 静态资源处理器<!-- 静态资源处理--><mvc:default-servlet-handler/>

极简单的方式序列化sqlalchemy结果集为JSON

继承 json.JSONEncoder 实现一个针对sqlalchemy返回类型的处理方式。 sqlalchemy的返回类型有大都有两种&#xff0c;一种是Model对象&#xff0c;一种是Query集合&#xff08;只查询部分字段&#xff09;。 针对这两种返回结果&#xff0c;都是来自同一中类型 sqlalchemy.orm…

easymock 图片_数据模拟神器 easy-mock 正式开源

开源公告由大搜车无线团队出品的 easy-mock 在线数据模拟服务上线至今已经有几个月时间了&#xff0c;近期网站刚更新了焕然一新的 2.0 版本&#xff0c;与此同时&#xff0c;我们还带来一个更重磅的消息&#xff1a;今天正式将整个服务的代码在 github 开源(github.com/easy-m…

在自定义Java 9映像上运行Eclipse Neon

我已经开始修改自定义Java二进制运行时映像文件。 映像文件是打包为运行时平台的模块的配置。 基本上&#xff0c;默认映像包含组成Java运行时的所有内容。 自定义图像可以包含该图像的一些子集。 例如&#xff0c;我创建了一个仅包含“ compact 3”概要文件的映像&#xff0c…

ssm异常捕获和处理

ssm异常捕获和处理package exception;import lombok.extern.slf4j.Slf4j; import org.hibernate.HibernateException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ResponseBody; import entity.vo.Res…

载波聚合或双连接的方式进行_处理载波聚合及双连接的装置及方法与流程

本发明涉及一种用于无线通信系统的通信装置及方法&#xff0c;尤其涉及一种处理载波聚合及双连接的装置及方法。背景技术&#xff1a;通过第三代合作伙伴计划(third generation partnership project&#xff0c;3GPP)发起的新无线(new radio&#xff0c;NR)系统包含有新无线接口…

拼接xml

拼接xml/*** description 拼接xml* param list 用户信息* return java.lang.String 拼接完成的xml* author zhaohuaqing* date 2021/6/21 15:39* version 1.0*/public static String getUserXMl(List<User> list,int totalNumber,int start){StringBuilder sb new Stri…

unity游戏开发毕设_一个程序小白的unity 2D游戏开发的反思与经验

学游戏设计的码农&#xff0c;中传大三在校生&#xff0c;代码水平目前还在进阶中。这个学期和美术一起进行了一次不成熟的磕磕绊绊的游戏开发。踩了很多坑&#xff0c;就当是毕设前的预热吧&#xff0c;做个总结&#xff0c;希望毕设不会再犯这些错误。因为整个本科阶段做的或…

Asp.Net MVC项目通过Git同步到新开发设备上后无法作为网站启动

右键项目名->属性->启动项目->单启动项目&#xff0c;在下拉框中选择你的网站主项目就可以了。&#xff08;由于用的英文版&#xff0c;所以翻译的内容可能略有差异&#xff09;转载于:https://www.cnblogs.com/chenyangsocool/p/7127469.html

前端参数编码

前端参数编码//对参数编码 function paramsCode(){var params ;$(.param).each(function () {var name $(this).attr("name");if ($(this).attr("type") "radio"){params (&name encodeStr($("input[name"name"]:checke…

如何以访客模式访问_重新访问了访客模式

如何以访客模式访问访客模式是面向对象设计中最被高估但又被低估的模式之一。 高估了它&#xff0c;因为它通常选择得太快了&#xff08; 可能是由建筑宇航员选择的 &#xff09;&#xff0c;然后以错误的方式添加后&#xff0c;使原本非常简单的设计肿了。 如果您不遵循教科书…

abap 创建出口历程_SAP abap 需找出口(BADI)的几种方法

现在给出一些比较简单的方法首先&#xff0c;大家要知道&#xff0c;一个程序的出口不会太多&#xff0c;需找出口&#xff0c;很多的时候都是在尝试第二&#xff0c;方法&#xff1a;首先会给出事务码&#xff0c;然后通过SE93找出对应的程序Y第三&#xff0c;se16里面&#x…

Objective-C基础语法高速入门

Objective-C是Mac软件开发领域最基本的开发语言&#xff0c;假如我们对C语言已经非常熟悉或者具有面向对象语言的基础。对于我们学习Objective-C将会非常实用。 方法调用(Calling Methods) 为了可以尽快上手。我们先来看一些简单的样例。Objective-C语法里面主要的方法调用是这…

华为堡垒机_运维堡垒机----Gateone

简介&#xff1a;运维堡垒机的理念起源于跳板机。2000年左右&#xff0c;高端行业用户为了对运维人员的远程登录进行集中管理&#xff0c;会在机房里部署跳板机。跳板机就是一台服务器&#xff0c;维护人员在维护过程中&#xff0c;首先要统一登录到这台服务器上&#xff0c;然…

拼图推迟将Java 9的发布日期推迟到2017年

由于Jigsaw项目的延迟&#xff0c;Java 9的发布日期被推迟到2017年 由于项目延迟的悠久历史&#xff0c;这可能不足为奇&#xff0c;但是看起来备受期待的拼图项目已被延迟。 再次。 好消息是&#xff0c;与上一次使用Java 8不同&#xff0c;它仍在Java 9的开发路线上。坏消息…

前端获取当前url路径

前端获取当前url路径//获取url路径 function getUrlPath(){//获取当前网址var currentPath window.document.location.href;//获取主机地址之后的目录var pathName window.document.location.pathname;var pos currentPath.indexOf(pathName);//获取主机地址var localhostPa…

jquery改变字符串中部分字符的颜色

//该方法改变字符串中中括号内&#xff08;包括中括号&#xff09;的字符串颜色为红色function changecolocer() {  var zf $(#YWFA).text();   if(zf.length>0){     $(#YWFA).html(zf.replace(/\【.*?\】/g,<label style"color:red;">$&<…

java自动推断类型_Java 7的类型推断

java自动推断类型每个优秀的程序员都喜欢编写简洁但有效且经过优化的代码。 类型推断是JDK 7中引入的一种方法&#xff0c;它肯定会为您带来更少键入的好处。 您以以下方式使用Java代码已有很长时间了。 但是&#xff0c;在初始化Collections的特定实现时&#xff0c;您是否曾经…

shell 删除七日内日志_shell日志删除(超容量自动)

背景&#xff1a;避免双十一磁盘被打爆&#xff0c;本想通过crontab执行&#xff0c;但是删除需要密码&#xff0c;所以用作当机器磁盘高于摸个阈值&#xff0c;进行无关性日志强删#!/bin/sh#use#sh clean.sh wmporder_prehost 38(说明&#xff1a;磁盘超过38%&#xff0c;则进…

form表单序列化转换为json对象

form表单序列化转换为json对象//form表单序列化转换为json对象 (function($){$.fn.serializeJsonfunction(){var serializeObj{};var arraythis.serializeArray();$(array).each(function(){if(serializeObj[this.name]){if($.isArray(serializeObj[this.name])){serializeObj[…