用 Geronimo 和 REST 构建服务器端 mashup.docx
- 文档编号:30455950
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:20
- 大小:159.69KB
用 Geronimo 和 REST 构建服务器端 mashup.docx
《用 Geronimo 和 REST 构建服务器端 mashup.docx》由会员分享,可在线阅读,更多相关《用 Geronimo 和 REST 构建服务器端 mashup.docx(20页珍藏版)》请在冰豆网上搜索。
用Geronimo和REST构建服务器端mashup
用Geronimo和REST构建服务器端mashup
使用REST、Ajax和ApacheGeronimo构建面向Twitter和GoogleMaps的mashup
级别:
中级
J.JeffreyHanson,首席架构师,MaxInternational
2008年11月10日
探索使用ApacheGeronimo、基于REST的协议和来自各种来源的数据构建mashup应用程序时可以使用的技巧与技术。
该mashup将组合GoogleMaps和Twittertweet中的数据以在Twitter用户更新其Twitter状态时精确定位他们的位置。
mashup一词最初被定义为混合两种或多种乐曲从而创作出全新音乐作品的技术。
在软件工程中,mashup指组合数据、UI组件和流程以创建新Web应用程序和站点的技术和模式。
在站点开发人员之间,Mashup十分流行,因为它可以轻松地组合数据与内容。
这种特性源于动态的且具有丰富语义的Web技术的普遍使用—这些技术包括XML、JavaScriptSerializedObjectNotation(JSON)、资源描述框架(ResourceDescriptionFramework,RDF)、动态JavaScript和Ajax。
这些技术和其他技术为开发创造性内容的开发人员提供了无限可能性。
常用缩写词
∙Ajax:
AsynchronousJavaScript+XML
∙API:
应用程序编程接口(Applicationprograminterface)
∙CSS:
层叠样式表(CascadingStyleSheet)
∙DOM:
文档对象模型(DocumentObjectModel)
∙HTML:
超文本标记语言(HypertextMarkupLanguage)
∙HTTP:
超文本传输协议(HypertextTransferProtocol)
∙UI:
用户界面(Userinterface)
∙XML:
可扩展标记语言(ExtensibleMarkupLanguage)
∙XSD:
XML模式文档(XMLSchemaDocument)
通常,可以通过组合UI组件、服务/过程以及数据创建mashup。
MashableUI组件包括动态JavaScript、HTML代码片段、RSS摘要和Web服务API调用的结果。
Mashup使用数据转换、动态JavaScript、DOM处理及其他技术,混合来自一个或多个站点的松散耦合的UI组件、过程、或数据。
当前的典型mashup包括将GoogleMaps中的地图与位置数据结合,例如犯罪统计数字和给定地区的房地产价格。
本文将讨论如何将Twitter和GoogleMaps提供的API与Ajax和Java™语言代码结合使用,构建可以在ApacheGeronimo环境中部署和执行的mashup。
了解Geronimo
Geronimo是可用于构建企业服务和应用程序的完全兼容的JavaPlatform,EnterpriseEdition(JavaEE)平台。
Geronimo是围绕使用反转控制(InversionofControl,IoC)技术高度解耦服务和组件的架构设计的。
这种高度解耦造就了真正的模块化且可配置的部署和执行环境。
Geronimo提倡使用JavaManagementExtension(JMX)和一个类似的特定于Geronimo的MBean风格的框架,该框架使Geronimo成为功能强大的、可管理的企业平台。
您将使用由轻量级内核引擎组装和管理的可自定义模块集创建Geronimo运行时环境。
内核引擎是Geronimo模块,该模块是由类、其他模块和可序列化配置组成的集合。
在启动Geronimo运行时实例后,Geronimo内核将载入、装配并组织模块。
装配的模块将决定Geronimo部署和执行环境的功能。
Geronimo运行时实例中的所有服务都被部署为模块。
Geronimo模块在XML文档中称为部署计划。
最终的Geronimo部署计划包含原始部署计划、Mavenproject.properties文件和MavenProjectObjectModel(POM)文件的组合。
图1显示了如何处理这些工件以创建最终部署计划。
图1.处理Geronimo部署计划
部署计划的内容是由XSD文件控制的。
部署计划将定义模块ID、模块的环境属性、模块的依赖关系、模块提供的服务及模块的GeronimoBeans(GBeans)等等。
清单1演示了一个简单的Geronimo部署计划。
清单1.示例Geronimo部署计划
xmlversion="1.0"encoding="UTF-8"?
>
//geronimo.apache.org/xml/ns/deployment-1.1"> 在构建过程编译清单1中所示的部署计划时,将用一个惟一名称创建配置归档(ConfigurationArchive,CAR)文件。 为清单1中的配置生成的惟一名称是geronimo/example-1.0.0/car。 GeronimoCAR文件 GeronimoCAR文件是JavaArchive(JAR)文件,其中包含一系列部署计划和任何其他额外资源。 部署计划系列包含在CAR的META-INF目录下名为config.ser的文件中。 CAR文件都是在构建过程中由Geronimo的Maven封装插件创建的。 Geronimo存储库 Geronimo存储库是一张工件注册表,通常表现为文件系统中的文件夹层次结构。 Geronimo的二进制版本将提供名为repository的文件夹,其中包含组成核心Geronimo平台的模块的所有依赖关系。 在Geronimo中,工件是任意的组件,例如存储于Geronimo存储库中的WebArchive(WAR)文件、JAR文件或者CAR文件。 工件存储于命令行部署实用程序或Geronimo发行版附带的GeronimoWeb控制台中。 下载并安装Geronimo 下载Geronimo平台(请参阅参考资料),然后将文件解压缩到名为GERONIMO_HOME的目录中。 在安装了Geronimo之后,打开命令行控制台并切换到GERONIMO_HOME/bin目录,然后运行startup.sh。 执行此命令将在一个新控制台窗口中启动服务器。 在服务器启动后,您应当会看到类似图2中所示的屏幕。 图2.Geronimo启动控制台 在建立Geronimo运行时环境时,启动控制台将显示装入和启动的模块、连接器和应用程序。 您可以使用同样在Geronimo安装的GERONIMO_HOME\bin\目录中找到的shutdown.sh脚本来停止Geronimo运行时。 了解REST 具象状态传输(RepresentationalStateTransfer,REST)是用于访问和更新网络资源的软件架构模式和调用样式。 RoyThomasFielding所撰写的论文(请参阅参考资料)中定义的REST一词,通常用于描述使用默认的HTTP方法集(GET、POST、DELETE和PUT)所定义的标准请求和响应通过HTTP传输数据。 REST架构样式强烈建议使用统一资源标识符(URI)来定位和访问资源的表示—称为资源的具象状态。 使用有限的创建/读取/更新/删除(CRUD)动作集,并且除HTTP之类标准协议提供的内容之外只需极少的额外开销,就可以访问和修改具象状态。 基于REST的约定应当保持无状态,从而使其成为诸如RSS、RDF、WebOntologyLanguage(OWL)和Atom之类语义数据格式的主要促进者。 了解GoogleMaps GoogleMapsAPI提供了若干种处理地图或者创建和检索可以嵌入到Web页面中的地图的方法。 本文旨在讨论GoogleMapsAPI提供的基于给定位置字符串检索地图的功能。 GoogleMaps的公共接口 GoogleMaps提供了使用标准HTTP请求就可以访问的API。 每个API请求要求事先取得API密钥。 GoogleMapsAPI支持KML和GeoRSS数据格式的HTTP响应。 使用GoogleMapsAPI 要开始使用GoogleMapsAPI,必须先在GoogleCode站点中注册以获得API密钥。 收到的密钥将对于单个Web域有效。 用GoogleMaps检索地图 GoogleMaps将公开能够检索给定位置的地理编码转换的API。 要检索用户的位置信息和其他信息,只需使用发出标准HTTPGET请求。 必须用Google分配给您的API密钥替换{apikey}。 下例显示了如何通过命令行用curl使用API。 C: \>curl-G %2C%20UT%26output=xml%26key=ABQIAAAA7kHuyDenRy7D_ kXwDkUfhBQCabR54RQscLxLTjQlrb8wKm07EBRSANMlyMuVIxp6jUQazrN52Pzp3w 响应将返回基于XML的数据,称为包含关于给定位置信息的KML。 KML是由OpenGeospatialConsortiumInc.(OGC)维护的开放标准。 下面显示了盐湖城的KML数据示例。 清单2.KML文档示例 ... 在此清单中, 了解Twitter Twitter提供了允许用户使用标准HTTP请求、即时消息和文本消息相互联系的服务。 Twitter服务的前提是让用户发送短消息,称为tweets,用于描述用户正在做什么。 tweets将被分发到Twitter服务器并转发给发送tweets的用户的“跟随者(follower)”。 Twitter的公共接口 Twitter提供了使用标准HTTP请求可以访问的一组API。 TwitterAPI围绕REST架构松散构建。 每个TwitterAPI目前都支持XML、JSON、RSS和Atom数据格式的HTTP响应。 下面的例子通过命令行结合使用TwitterAPI与curl来检索RSS格式的Twitter公共历史: C: \>curl-G 其他API可用于执行诸如检索朋友的历史、发布内容状态更新、更新配置文件位置和检索用户的配置文件数据之类的任务。 检索Twitter用户的位置 Twitter将公开能够检索用户配置文件的location属性的API。 要检索用户的位置和其他信息,只需使用创建一个标准的HTTPGET请求。 必须用要检索其信息的用户的TwitterID替换{targetUserID}。 下面显示了通过命令行用curl使用此API的示例: C: \>curl-G 响应将返回XML格式的数据,其中包含用户信息,包括在用户的配置文件中配置的用户位置。 下面显示了用户jhanson583的XML数据示例。 清单3.Twitter用户配置文件的XML数据示例 xmlversion="1.0"encoding="UTF-8"? > … 在这里, 注意,由于可以键入任意格式的字符串,因此不能够保证可以有效地应用于GoogleMaps查询中。 因此,只能检索用户配置文件中在 以上配置文件中所示的位置数据可以有效地应用于GoogleMaps查询中。 用Java代码检索Twitter用户的位置 检索用Java语言编写的用户配置信息只需发送HTTPGET请求并解析响应。 清单4中的代码片段提供了发送通用HTTPGET请求的Java代码。 清单4.用Java语言编写的HTTP请求示例 publicstaticStringsendHTTPRequest(Stringurl) throwsException { Stringres=null; try { HttpURLConnectioncon=null; InputStreaminStream=null; OutputStreamoutputStream=null; try { con=(HttpURLConnection)newURL(url).openConnection(); con.setDoInput(true); con.setRequestMethod("GET"); inStream=con.getInputStream(); res=parseHTTPResponse(inStream); } finally { try { inStream.close(); outputStream.close(); con.disconnect(); } catch(Exceptione) { } } } catch(IOExceptione) { e.printStackTrace(); } returnres; } publicstaticStringparseHTTPResponse(InputStreaminStream) throwsIOException { BufferedReaderbr=null; br=newBufferedReader(newInputStreamReader(inStream,"UTF-8")); StringBufferbuf=newStringBuffer(); Stringline; while(null! =(line=br.readLine())) { buf.append(line).append("\n"); } returnbuf.toString(); } 在此清单中,HttpURLConnection元素用于发送GET请求。 请求的响应将以InputStream形式被检索,然后逐行读取以访问XML数据。 使用上面用于发送HTTP请求的代码,您可以向TwitterAPI发出检索用户配置文件的调用,如下所示: 清单5.检索用Java语言编写的Twitter配置文件数据的HTTP请求 publicclassTwitter { privatestaticfinalStringAPI_URL=" publicstaticStringgetUserLocation(StringtargetUserID) throwsException { Stringresponse= HTTP.sendHTTPRequest(API_URL+targetUserID+".xml",null); DocumentBuilderdocBuilder= DocumentBuilderFactory.newInstance().newDocumentBuilder(); Documentdoc= docBuilder.parse(newInputSource(newStringReader(response))); if(null! =doc) { NodeListnodeList=doc.getElementsByTagName("location"); if(null! =nodeList&&nodeList.getLength()>0) { NodelocationNode=nodeList.item(0); if(null! =locationNode) { returnlocationNode.getTextContent(); } } } thrownewException("InvalidHTTPresponsecontentencountered"); } } 了解Ajax Ajax包括一系列技术和概念,用于在支持JavaScript的浏览器与HTTP服务器之间进行交互,不需要直接刷新页面就可调用服务器请求。 Ajax还是使用JavaScript、CSS、DOM处理等动态更新浏览器页面的技术和概念集。 通过浏览器页面检索服务器数据以及应用数据而不刷新页面的功能为创建基于浏览器的应用程序提供了方便的环境,其丰富的UI体验可以与桌面应用程序相媲美。 基于Ajax的页面需要使用名为XMLHttpRequest对象的JavaScript对象。 此对象用于同步或异步地将HTTP请求从浏览器传输到服务器并且接收来自服务器的响应。 清单6中的代码片段将在ajaxPost方法中创建XMLHttpRequest对象的实例。 XMLHttpRequest对象随后用于在服务器框架中调用标准的HTTPPOST方法。 在服务器框架中检索的数据是通过XMLHttpRequest对象的send方法控制的,将在其中检索、解析数据并把数据传递给createMap方法,从中创建GoogleMaps地图并应用于页面。 清单6.处理XMLHttpRequest请求和响应 DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0 Strict//EN""http: //www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> //www.w3.org/1999/xhtml"xmlns: v="urn: schemas-microsoft-com: vml"> type="text/javascript"> // [CDATA[ if(GBrowserIsCompatible()) { //============================================= //createMarkerfunction //============================================= functioncreateMarker(point,html) { varmarker=newGMarker(point); GEvent.addListener(marker,"c200
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Geronimo REST 构建服务器端 mashup 构建 服务器端