1、Coldfusion初级培训,软件编程培训资料,培训目标,Coldfusion简介熟悉Coldfusion常用技巧了解使用Coldfusion注意事项熟悉JS在IE及Firefox常见兼容问题,COLDFUSION简介,ColdFusion(直译:冷聚变)出生于1995年夏天(7月13),创始人JJ Allaire、Jeremy Allaire,最初设计用途是用来帮助撰写HTML的程序设计师们能够设计出与数据库互动的网页应用程序。它既是一种应用服务器也是一种编程语言,主要用于商业(需购买)应用服务器。ColdFusion语言(CFML-ColdFusion Markup Language)是模
2、仿HTML、功能强大的编程语言,拥有图表功能、全文检索引擎、 Web Services 、Flash Remoting等模块定制功能。它具有以下一些特点:1. 易学易用。2. 开发效率高。3. 扩展性强,可自定义标签。4. 可移植。5. 基于J2EE核心。,Coldfusion常用技巧- IsValid,1,使用IsValid函数语法: IsValid(type, value)IsValid(“range”, value, min, max) IsValid(“regex” or “regular_expression”, value, pattern)例如:a.If (NOT Isvalid
3、(email,form.email) / 邮件无效;b.If (Isvalid(variableName ),url.abc) #url.abc# = 123; else /URL参数有误c.If (!IsValid(range,Discount,0,100) /折扣无效d.IsValid(regex, abc123, a-z0,30-9*) /正则表达式,Coldfusion常用技巧- IsValid,Coldfusion常用技巧-空白处理,2,页面代码空白处理Coldfusion产生的缩进CML代码的空白,可以采取以下方法进行处理.a.Coldfusion Administrator中Se
4、tting中,启用”Suppress Whitespace”,可以智能压缩常规空白 b.只显示output内容c,无条件压缩空白,包括output内容,例如:.d,也可以压缩空白,另外用于保留空白,例如:空白行. e,禁止方法中输出内容,如,Coldfusion常用技巧-CFQuery,3,CFQuery的一些技巧a.动态访问cfquery的数据, queryNamecolumnnamerow,如qRateqCurrency.FieldName1b,cfquery内置方法voidqueryName.first() 跳到第一个记录void queryName.last() 跳到最后一个记录boo
5、lean queryName.isFirst() 是否为第一条记录 boolean queryName.isLast() 是否为最后一条记录 boolean queryName.next() 下一条记录boolean queryName.previous() 上一记录int queryName.findColumn(String name) 通过列名返回列ID(由0开始)void sort(int columnID, boolean ascending) 排序stringgetColumnTypeName(int columnID) 返回列类型arraygetMetaData(querynam
6、e),返回cfquery的元数据,可以得到真实的字段名列表,不按字母排序,例如:queryname1.name得到第一列字段名.,Coldfusion常用技巧-CFQuery,c, 指定cfquery的result属性,例如,可以了解到cfquery详细执行情况,Cached是否使用了缓存Columnlist影响到的列Executiontime执行时间Recordcount返回记录数SQL所使用的SQL语句d,Cfscript快速读取cfquerywhile (quser.next() writeoutput(quser.next.UserEmail);,Coldfusion常用技巧-缓存,4
7、,使用缓存提高性能a. 使用”查询高速缓存”,例如:实现功能: 当第一次执行该sql以后,将结果保留在内存中15分钟,下次访问该页面的时候直接从内存中读取数据,不再跟数据库交互,15分钟以后重新到数据库取得数据并存放到内存.也可以使用下面的语句马上清除缓存.对于不经常更新的数据,使用这个特性可以大大提高程序性能.注意事项: *使用清除缓存功能的时候要保持两个cfquery中的代码及相关属性完全一致! *设置最大缓存数量限制,以免占用大量系统RAM资源(Coldfusion administrator-CachingMaximum number of cached templates),比如设置
8、为20. *当cfquery返回记录数大于100时,添加BlockFactor=“100”,以提高整体查询性能如:,Coldfusion常用技巧-缓存,b,使用客户端”页面缓存”,例如:在页面顶部添加以上代码,浏览器将在3小时内自由的使用页面的本地副本,如果需要缓存所有页面,在Application.cfm添加该代码即可.c,使用服务器端”页面缓存”,例如:这句话告诉Coldfusion,本页面只需要每隔30分钟实际执行一次,当浏览器第一次发送请求时,它将该页面作为一个单独的,静态的文件保存在服务器驱动器上,下次访问时就直接发回文件的静态版本. 注意事项: *使用服务器缓存技术以后,服务器不再
9、为每一个用户生成独立的页面,并且共享Client、Cookie、Session变量,涉及使用相关变量的页面建议使用客户端缓存.*带URL参数的页面将将作为不同页面独立缓存。*使用手工清除缓存.,Coldfusion常用技巧-加密,5. 数据安全(加密) 通常需要对用户密码,银行相关帐号,或者业务机密等信息进行加密,以防止泄漏,coldfusion也提供了一对加解密函数,实现数据的加密.如下所示:或者 注意:不能使用DECRYPT(encrypted, key)和DECRYPT(encrypted, key)来处理中文。,使用Coldfusion注意事项,1,关于SQL注释,不要在使用updat
10、e Userset - Phone = 这样,偶尔会出现”Invalid parameter binding(s)”错误.可以使用进行注释2,一定要在 #form.searhdate#3,避免使用evaluate(),除非没有其他办法来写代码了 (几乎总是有其他的办法来写代码)。4,使用 struct.key或者structkey,不要使用structFind(struct, key)。因为速度更快,可读性更好。,使用Coldfusion注意事项,5,尽量不使用iif(),用 cfif/cfelse取代iif(),效率更高,可读性也更好。6,Coldfusion中数据操作比字符串操作效率更高,
11、但如果变量本是一个List,不要把 List 转变成一个array 然后循环- 因为总的速度不会快多少.7,针对大于64k的数据存储,需要在Coldfusion Administrator中数据源选项中进行设置,在数据源编辑窗口中,点击“Show Advanced Settings”,设置”Long Text Buffer(chr)”或者Blob Buffer(bytes)”值,如: 1024000。8, Coldfusion中默认开启了脚本保护功能,智能防止恶意代码,进入数据库之前会自动将、等字符串进行替换,如果需要在某个目录下的代码中禁用脚本保护,比如将一些HTML及JS代码存入到数据库,
12、可以参考以下代码:,使用Coldfusion注意事项,9, Coldfusion会自动缓存Webservice,如果对Webservice进行了更新,需要清除Webservice缓存方能起效!清除方法参考以下代码:,JS在IE及Firefox常见兼容问题,1,取得对象IE: document.formName.item(itemName) FF: document.formName.elementselementName IE: document.forms(“formName”) document.getElementsByName(“inputName”)(1) FF: document.
13、forms“formName” document.getElementsByName(“inputName”)1IE: document.对象IDFF: document.getElementById(对象ID)建议:*尽量使用对象ID属性,比如*总是使用document.getElementById(对象ID)取得对象,包括Iframe*使用 作为下标运算,JS在IE及Firefox常见兼容问题,2,捕捉window.event事件IE中 可以使用window.eventFF中 event 只能在事件发生的现场使用,可以改写成 事件=函数(event);function somemethod
14、(evt) evt = evt ? evt : (window.event ? window.event : null); alert(evt); 例如:取得事件的坐标使用event.clientX/clientY,因为Firefox不支付event.x/y3,showModalDialog子窗口IE中可以用showModalDialog一个子窗口,并获得返回值.FF中没有showModalDialog,但可以用window.open来实现.例如: 在Main.cfm文件中有如下代码:,JS在IE及Firefox常见兼容问题,function ShowItemList(Obj)if (docu
15、ment.all)/IEvar ReturnValue=window.showModalDialog(ItemList.cfm?Id=321, self,dialogwidth:600px;status:false);if (typeOf(ReturnValue)!=undefined) Obj.value=ReturnValue; else var subwin=window.open(subwin.cfm?id=321, newWin,modal=yes,width=600px); function ReturnValue(ReturnValue) Obj=document.getElem
16、entById(elementname); Obj.value=ReturnValue;,JS在IE及Firefox常见兼容问题,如果需要得到返回值.需要用到window.open的参数modal=yes,而且必须在子窗口中向母窗口传值(window.opener).例如在subwin.cfm中加入以下代码:function ReturnThisValue() window.opener.ReturnValue(document.getElementById(SelectedItem).value);4,event.keyCode问题IE中的event.keyCode在Firefox只能用ev
17、ent.which代替,例如:function catcathevent(evt) evt = evt ? evt : (window.event ? window.event : null); if (document.all) var keyvalue=evt.keyCode; else var keyvalue=evt.which;,JS在IE及Firefox常见兼容问题,5,一些兼容注意事项a,使用getAttribute() 得到标签自定义属性b, Firefox中可以使用textContent 代替innerTextc, Firefox中使用class代替IE中的className
18、d, 如果FF调用obj.focus(); 有时报错,请尝试改: window.setTimeout( function() obj.focus(); , 0);e, Firefox不支付Filter滤镜f, Firefox中设置容器位置 left、top及长宽,必须加上px,如 $(obj).style.left = 50px; g, Firefox中没有 parentElement parement.children 而用parentNode parentNode.childNodes,可以使用 node.getElementsByTagName()h, 得到事件作用对象,ie用objEvent.srcElement,ff用objEvent.target,提高自我、贡献自我,谢谢,