快速业务通道

精通Grails: 创建自定义插件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
要查 看包含配置文件详细信息的在线文档,请参见 参考资料)。

如果您想允许其他开发人员从 Plugins 门户网站下载这个插件,应该填写作者信息和具有吸引力的说 明。每当您将插件签入公共 Subversion 存储库,文件的内容将被读取并自动显示在 Grails Web 站点上 。(要了解关于发表您的插件的更多信息,请参见 参考资料)。在本文中,这个插件将作为一个私有插 件,因此,填写作者信息就不那么重要了。

即使这个 ShortenUrl 插件不需要对 ShortenurlGrailsPlugin.groovy 进行任何更改,但这并不代表 您的工作已经完成了。现在目录结构已经就绪,下一步就是编写实现。

创建 TinyUrl 类

TinyUrl.com 是一个流行的 URL-shortening 服务。某人提交一个长 URL 请求缩短后,它将针对后续 请求在后台将其存储为一个正式的缩短 URL。例如,访问该站点,输入 http://www.grails.org/The+Plug-in+Developers+Guide,然后单击 Make TinyURL! 按钮。生成的缩短 URL — http://tinyurl.com/73495c — 是原长度的一半,如图 1 所示。

图 1. TinyURL.com 缩短一个 URL

现在您了解了 TinyURL.com 的工作方式,下面可以关注如何将这个网站的底层服务和 ShortenUrl 插 件集成起来了。在您的 Web 浏览器中输入以下内容:

http://tinyurl.com/api-create.php?url=http://www.grails.org/The+Plug- in+Developers+Guide

这个 Web 服务界面只返回指定页面的缩短的 URL,而不是 HTML。

下一步是将您的新发现封装到 Groovy 类中。这个类是一个 Plain Old Groovy Object (POGO),正如 它的名称所示,它不是服务、控制器或任何其他具有特殊目的的 Grails 组件。因此,放置它的最好位置 是 src/groovy。在 src/groovy 下创建一个 org/grails/shortenurl 目录,然后创建 TinyUrl.groovy 并添加清单 3 中的代码:

清单 3. TinyUrl 实用程序类

package org.grails.shortenurl class TinyUrl{   static String shorten(String longUrl){    def addr = "http://tinyurl.com/api-create.php?url=${longUrl}"    return addr.toURL().text   } }

插件中的包

将插件的类放在一个包中是一种很好的实践,这极大地减小了与用户的 Grails 项目中的现有类造成 冲突的几率。

还可以打包域类、控制器等。对于简单的项目,这种不太常见的实践会增加不必要的复杂性,但经验 丰富的 Grails 开发人员非常信任这种实践。

精通Grails: 创建自定义插件(3)

时间:2011-08-02 IBM Scott Davis

测试 TinyUrl 类

将代码用于生产前,应该进行相应的测试,不是吗?由于您要进行一个实时 Web 调用,因此这应该是 一个集成测试。在 test/integration 下创建此前创建过的相同的 org/grails/shortenurl 目录结构。 创建 TinyUrlTests.groovy 并添加清单 4 中的代码。(在这个简单的例子中,宣称很小的 URL 竟然比 它要编码的原始 URL 还要长。这非常有趣)。

清单 4. 测试 TinyUrl 类

package org.grails.shortenurl class TinyUrlTests extends GroovyTestCase{   def transactional = false   void testShorten(){    def shortUrl = TinyUrl.shorten("http://grails.org")    assertEquals "http://tinyurl.com/3xfpkv", shortUrl   } }

注意集成测试中的 def transactional = false 这一行。如果省略这一行,您将收到令人讨厌的错误 消息,如清单 5 所示。

清单 5. 测试没有设置 def transactional = false 时收到的错误消息

Error running  integration tests: java.lang.RuntimeException: There is no test TransactionManager defined and integration test ${test.name} d

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号