`
Nainse
  • 浏览: 23996 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Grails 1.1 的动态编码方案(Dynamic Encoding Methods)

阅读更多

翻 by: Nainse 2009年6月3日9:16:48

概述
从版本0.4开始,Grails加入了对动态编/解码的支持,Grails自身拥有一些内置的编码器,也支持开发人员贡献出来的在运行时被组织好的
简单机械的编码方法。

编码器 类
一个Grails的编码器类,可以只包含一个encode或decode方法,或者两个都包含。Grails框架在启动的时候会动态的在
/grails-app/utils/目录下搜寻并加载编码器。

Grails会在grails-app/utils/下查找以Codec为类名后缀的类作为编码器(这些都是遵循了Grails规约的命名方案)。例如,Grails框架自带的HTMLCodec.groovy类。(在Grails这艘豪华游轮上,还有一个utils舱,这里的成员都有固定的服装(类有固定的后缀名),能让我们一看就知道他们各个都是干啥工作地(类的功能))

如果某编码器包含一个名叫encode的闭包(def encode = {//some codes}),则Grails会在String类中动态的声明一个用来描述改编码器的encode闭包的方法,这个闭包会以该编码器的名字(去掉Codec后缀的编码器的名字),如HTMLCodec定义了一个encode闭包,Grails在String类中贴上一个encodeAsHTML的标签来描述该HTMLCodec中的encode闭包。

在HTMLCodec和URLCodec编码器中同时也定义了decode闭包,所以在String类中,Grails也会贴上decodeHTML和decodeURL的标签。这些动态编码器的方法可以在Grails应用的任何地方被调用。例如:一个report对象包含了一个description属性,这个description属性的值可能包含了一些HTML文档定义过的特殊字符,如果我们想在页面上展现这些字符,就需要一些编码转换。在GSP中我们可以:

${report.description.encodeAsHTML()}

解码的时候我们可以:

value.decodeHTML()。

 

Grails中标准的编码器

  HTMLCodec
  -------------------------------------------------------
  该编码器是用来对HTML文档中定义的标准标签和特殊字符的编码和解码用的。也是为了确保在不额外创建任何html标签,不破坏html页面布局的情况下,能安全、真实地呈现你所提供的值。例如:如果你有“Don't you know that 2 > 1 ?”,它将不能安全在html页面中被展示,因为“>”像是html标签的关闭符号的关系,尤其是你用包含有这个字符(>)字符串作为html标签的属性值的时候更为糟糕,例如在html的input标签中可以:

<input type="text" name="common.message" value="${common.message.encodeAsHTML()}"/>

 ----------注意--------------
HTMLCodec的encode方法不能重新编码 撇号(`)和单引号('),所以,为了不使 撇号或者单引号弄乱你的页面你不得不使用双引号(")
来替代。
----------------------

  URLCodec
  -------------------------------------------------------
  无论你是通过link或是action来创建一个url,你都需要对该url进行编码,这样能屏蔽掉其中对url来说无效的字符,从而使该url能准确的传达你的本意。假如你有这么一个值“Apple & Blackberry”要通过GET方法在url中传递出去,那么它很可能很难完成你交给的这个任务,因为“&”将会影响url中参数的分割,此时就需要url编码器来对它进行编码:

<a href="http://www.baidu.com/lastSearch=${lastSearch.encodeAsURL()}" >Last Search</a>

 

  BASE64Codec
  -------------------------------------------------------
  提供了基于BASE64加密的编码和解码方法,如:
  
  

Your registrations code is: ${user.registrationCode.encodeAsBASE64()}

   
  JAVASCRIPTCodec
  -------------------------------------------------------
  用例:
  
  

Elment.update('${elmentId}', '${render(template:"common/message").encodeAsJavaScript()}')

   
用户自制编码器
  每一个应用缔造者都享有定制自己的编码器的权利,这个自制编码器将和Grails框架自带的编码器一道被加载。前面说过怎么在定制一个自己的编码器,还记得吗?那好,我们从新来复习一遍这个很惬意的过程:

1.在grails-app/utils/目录下创建一个名字为XXXCodec.groovy(记得Codec的后缀名哦,它就像是轮船或火车上乘务人员的服装一样)
2.在该类中声明encode或decode的闭包或两者都声明

(你可以:

def encode = { str ->//...} 

 或

static encode = { str -> //...}

 )

以上两步完成之后,XXXCodec类的样貌可以是:

class XXXCodec {
  static encode = { str ->
    //convert the string to some sepcial encode and return the result
  }
}

 之后,我们就可以在整个应用的每一个角落里呼叫它来为我们服务了:

someObject.someAttribute.encodeAsXXX()

 下面是一个 密码编码器 的 完全例子:

import java.security.MessageDigest
import sun.misc.BASE64Encoder
import sun.misc.CharacterEncoder

class PasswordCodec {
  
  def encode = {
    str ->
    //用 SHA 加密密码
    MessageDigest md = MessageDigest.getInstance('SHA')
    md.update(str.getBytes('UTF-8'))
    //把SHA加密产生的字节数组交给BASE64在加密一把,并返回该字符串
    return(new BASE64Encoder()).encode(md.digest())
  }
}

 (想了解Java的简单的加密算法技术,可以到:http://www.groovycn.cn/thread-154-1-1.html

分享到:
评论

相关推荐

    Grails1.1中文文档.rar

    通过阅读《Grails1.1中文文档.chm》和解压后的《Grails.rar》文件,你可以获得详细的框架指南、API文档和示例代码,从而加速学习进程。对于初学者来说,这份文档将是你理解Grails 1.1及其开发流程的重要参考资料。

    Grails1.1中文文档

    Grails1.1中文文档

    grails1.1中文文档

    这份“Grails1.1中文文档”是专为初学者准备的指导材料,帮助他们更好地理解和掌握Grails框架。 1. **Groovy语言基础**:Grails 使用 Groovy 作为主要编程语言,Groovy 是一种简洁、面向对象的JVM语言,具有动态...

    Grails 1.1 Web Application Development

    ### Grails 1.1 Web Application Development #### 核心知识点概述 《Grails 1.1 Web Application Development》是一本专注于使用Grails框架进行高效Web应用开发的技术书籍。本书由作者Jon Dickinson撰写,旨在...

    Grails1.1中文文档(CHM)

    Grails1.1最新 中文 文档 当今的Java Web开发技术显得过于复杂,相对于它本身的需要来说。现在主流的Java Web框架也是异常复杂,而且没有很好的遵循 Don't Repeat Yourself (DRY) 法则。 因此我们要以一种新的思维...

    Grails1.1中文文档.zip

    《Grails 1.1 中文文档》是一个针对Grails框架1.1版本的详尽指南,旨在帮助中文用户理解并掌握这一强大的Groovy构建的Web应用开发平台。Grails是一个基于Groovy语言的开源框架,它采用了模型-视图-控制器(MVC)架构...

    Grails 1.1 中文手册 chm

    Grails 最新的 v1.1版的中文文档,chm格式,Grails是一套快速开发Web应用的开源框架,基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,能为大家带来超高效率的一站式框架。

    Grails1.1中文文档-----2009.3.25

    Grails1.1中文文档-----2009.3.25

    grails framework 1.1 中文

    grails framework 1.1 中文

    grails-1.2.2.zip

    《Grails 1.2.2:Web开发的革命性框架》 Grails,作为一款基于Groovy语言的开源Web应用框架,自诞生以来就以其高效、简洁和强大的功能吸引了众多开发者。Grails 1.2.2是该框架的一个重要版本,它在1.x系列中扮演了...

    Grails Grails Grails

    《Grails1.1中文文档》是Grails 1.1版本的官方中文指南,包含了框架的详细介绍、安装指南、基本概念、MVC模式的应用、GORM的使用、服务层、控制器、视图、国际化、测试等方面的内容。通过阅读这份文档,开发者可以...

    grails-bin-1.1

    Grails的GORM(Grails Object-Relational Mapping)提供了对数据库操作的支持,而GSP(Grails Server Pages)是视图层的模板引擎,允许开发者用Groovy语法编写动态页面。此外,Grails的插件系统允许扩展功能,比如...

    Grails Quick Reference 1.1

    ### Grails 快速参考指南 1.1:领域模型与数据验证 #### 领域类(Domain Class) 在Grails框架中,领域模型是应用程序的核心组件之一,用于表示数据库中的实体。Grails通过使用GORM(Groovy on Rails ORM)提供了...

    grails中文文档

    提供的 "Grails1.1中文文档-----2009.3.25.chm" 和 "Grails.zip" 文件,应该包含了 Grails 1.1 版本的中文文档和可能的示例代码。这些文档可以帮助你深入了解 Grails 的各项特性和使用方法,特别是对于初学者来说,...

Global site tag (gtag.js) - Google Analytics