快速业务通道

精通Grails: Grails服务和Google地图 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
  <population/>    <alternateNames>DEN,KDEN</alternateNames>    <elevation>1655</elevation>    <continentCode>NA</continentCode>    <adminCode1>CO</adminCode1>    <adminName1>Colorado</adminName1>    <adminCode2>031</adminCode2>    <adminName2>Denver County</adminName2>    <alternateName lang="iata">DEN</alternateName>    <alternateName lang="icao">KDEN</alternateName>    <timezone dstOffset="-6.0" gmtOffset="-7.0">America/Denver</timezone>   </geoname> </geonames>

您在 URL 中输入的 name_equals 参数是该机场的 IATA 代码。这只是在每个查询中需要更改的 URL 的一部分。fcode=airp 表明您正在搜索的特征代码是一个机场。style 参数 — short、medium、long 或 full — 指定了 XML 响应的详细程度。

现在已经准备好地理编码器,下一步就是将它与 Grails 应用程序集成在一起。为此,您需要一个服 务。

精通Grails: Grails服务和Google地图(2)

时间:2011-07-29 IBM Scott Davis

Grails 服务

到目前为止,通过学习 精通 Grails 系列文章,您应该已经明白域类、控制器和 Groovy 服务器页面 (Groovy Server Pages,GSP 是如何协调工作的。它们简化了在单一数据类型上执行基本的创建/检索/ 更新/删除(Create/Retrieve/Update/Delete,CRUD)操作。这个地理编码服务似乎略微超出了简单 Grails Object Relational Mapping(GORM)转换(从关系数据库记录到普通的旧 Groovy 对象(plain old Groovy objects,POGO))的范围。同样,这个服务很可能由多种方法使用。稍后您将看到,对 IATA 代码进行地理编码需要用到 save 和 update。Grails 为您提供了保存常用方法的位置,并且超越 了任何单个的域类:即服务。

要创建 Grails 服务,请在命令行输入 grails create-service Geocoder。在文本编辑器中查看 grails-app/services/GeocoderService.groovy,如清单 2 所示:

清单 2. 一个无存根(stubbed-out)Grails 服务

class GeocoderService {    boolean transactional = true    def serviceMethod() {    } }

如果使用同一个方法进行多个数据库查询,那么将涉及到 transactional 字段。它将所有内容都包装 在一个单个数据库事务中,如果任何一个查询失败,该数据库事务将回滚到原来的状态。因为在本示例中 您远程地调用 Web 服务,所以可以安全地将它设置为 false。

名称 serviceMethod 是一个占位符(placeholder),可以将其改为更具描述性的内容(服务可以包 含任意多种方法)。在清单 3 中, 我把名称改为 geocodeAirport:

清单 3. geocodeAirport() 地理编码器服务方法

class GeocoderService {    boolean transactional = false    // http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full    def geocodeAirport(String iata) {     def base = "http://ws.geonames.org/search?"     def qs = []     qs << "name_equals=" + URLEncoder.encode(iata)     qs << "fcode=airp"     qs << "style=full"     def url = new URL(base + qs.join("&"))     def connection = url.openConnection()     def result = [:]     if(connection.responseCode == 200){      def xml = connection.con

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号