Coldfusion初级编程培训_第1页
Coldfusion初级编程培训_第2页
Coldfusion初级编程培训_第3页
Coldfusion初级编程培训_第4页
Coldfusion初级编程培训_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Coldfusion初级培训

软件编程培训资料培训目标Coldfusion简介熟悉Coldfusion常用技巧了解使用Coldfusion本卷须知熟悉JS在IE及Firefox常见兼容问题COLDFUSION简介 ColdFusion〔直译:冷聚变〕出生于1995年夏天(7月13),创始人JJAllaire、JeremyAllaire,最初设计用途是用来帮助撰写HTML的程序设计师们能够设计出与数据库互动的网页应用程序。它既是一种应用效劳器也是一种编程语言,主要用于商业〔需购置〕应用效劳器。 ColdFusion语言〔CFML-ColdFusionMarkupLanguage〕是模仿HTML、功能强大的编程语言,拥有图表功能、全文检索引擎、WebServices、FlashRemoting等模块定制功能。它具有以下一些特点: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(NOTIsvalid(‘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-z]{0,3}[0-9]*") //正那么表达式Coldfusion常用技巧-IsValidIsValid函数参数:[type]any:等同于IsSimpleValue(),判断是否为简单变量array:等同于IsArray(),判断是否为数组binary:等同于IsBinary(),判断是否为二进制数据.boolean:等同于IsBoolean().creditcard:是否为一个13-16位的信用卡dateortime:等同于IsDate()email:判断是否为email格式.eurodate:是否为日期格式(包含US时间格式在内)floatornumeric:等同于IsNumeric().guid:是否为一个美国身份证号码.integer:是否为整型query:同等于IsQuery().range:是否在min-max范围内(IsValid('range',30,12,66)>>yes)regex

or

regular_expression:正则表达式判断.ssn

or

social_security_number:是否为一个美国安全号码.string:是否为一个字符串(由字母和数字组成)struct:等同于IsStruct().telephone:是否为一个美国标准电话号码.URL:是否为一个URL地址(http,https,ftp,file,mailto),UUID:是否为一个UUID.USdate:是否为美国时间格式(mm/dd/yy).zipcode:是否为5位或者9位的邮编.variableName:是否为一个合法的变量名.Coldfusion常用技巧-空白处理2,页面代码空白处理 Coldfusion产生的缩进CML代码的空白,可以采取以下方法进行处理.. a.ColdfusionAdministrator中Setting中,启用”SuppressWhitespace”,可以智能压缩常规空白b.<cfsettingenablecfoutoutonly=‘yes’>只显示output内容 c,<cfsilent>无条件压缩空白,包括output内容,例如: <cfsilent> <cfloopquery=‘userlist’> …….. </cfloop> </cfsilent> d,<cfprocessingdirectivesuppresswhitespace=‘no’>也可以压缩空白,另外 <suppresswhitespace=‘no’>用于保存<PRE>空白,例如:

<cfprocessingdirectivesuppresswhitespace=‘no’> <PRE> [空白行]…. </PRE> </cfprocessingdirective> e,禁止方法中输出内容,如<cffunctionoutput=‘false’>Coldfusion常用技巧-CFQuery3,CFQuery的一些技巧

a.动态访问cfquery的数据,queryName[columnname][row],如 qRate[qCurrency.FieldName][1] b,cfquery内置方法 void queryName.first()跳到第一个记录

void queryName.last()跳到最后一个记录

boolean queryName.isFirst()

是否为第一条记录

boolean queryName.isLast()是否为最后一条记录

boolean queryName.next()下一条记录

boolean queryName.previous()上一记录

int queryName.findColumn(Stringname)通过列名返回列ID〔由0开始〕

void sort(intcolumnID,booleanascending)排序

string getColumnTypeName(intcolumnID)返回列类型 array getMetaData(queryname),返回cfquery的元数据,可以得到真实的字段 名列表,不按字母排序,例如:queryname[1].name得到第一列字段名.Coldfusion常用技巧-CFQueryc,指定cfquery的result属性,例如<cfqueryresult=‘qresult’>,可以了解到cfquery详细执行情况,

Cached 是否使用了缓存

Columnlist 影响到的列

Executiontime 执行时间

Recordcount 返回记录数

SQL 所使用的SQL语句d,Cfscript快速读取cfquery<cfscript>while(quser.next()){ writeoutput(quser.next.UserEmail);}</cfscript>Coldfusion常用技巧-缓存4,使用缓存提高性能 a.使用”查询高速缓存”,例如: <cfquerycachedwithin="#CreateTimeSpan(0,0,15,0)#"> 实现功能:当第一次执行该sql以后,将结果保存在内存中15分钟,下次访问该页面的时候直接从内存中读取数据,不再跟数据库交互,15分钟以后重新到数据库取得数据并存放到内存.也可以使用下面的语句马上去除缓存. <cfquerycachedwithin="#CreateTimeSpan(0,0,0,-1)#"> 对于不经常更新的数据,使用这个特性可以大大提高程序性能. 本卷须知: *使用去除缓存功能的时候要保持两个cfquery中的代码及相关属性完全一致! *设置最大缓存数量限制,以免占用大量系统RAM资源(Coldfusionadministrator- >Caching>Maximumnumberofcachedtemplates),比方设置为20. *当cfquery返回记录数大于100时,添加BlockFactor=“100”,以提高整体查询性能

如:<cfqueryname=“qUser”BlockFactor=“100”…>Coldfusion常用技巧-缓存 b,使用客户端”页面缓存”,例如: <cfcacheaction=“ClientCache”TimeOut=“#DateAdd(‘h’,-3,now())#”> 在页面顶部添加以上代码,浏览器将在3小时内自由的使用页面的本地副本,如果需要缓存所有页面,在Application.cfm添加该代码即可. c,使用效劳器端”页面缓存”,例如: <cfcacheaction=“Cache”TimeOut=“#DateAdd(‘h’,-30,now())#”> 这句话告诉Coldfusion,本页面只需要每隔30分钟实际执行一次,当浏览器第一次发送请求时,它将该页面作为一个单独的,静态的文件保存在效劳器驱动器上,下次访问时就直接发回文件的静态版本. 本卷须知: *使用效劳器缓存技术以后,效劳器不再为每一个用户生成独立的页面,并且共享Client、Cookie、Session变量,涉及使用相关变量的页面建议使用客户端缓存. *带URL参数的页面将将作为不同页面独立缓存。 *使用<cfcacheaction=“Flush”>手工去除缓存.Coldfusion常用技巧-加密5.数据平安(加密)通常需要对用户密码,银行相关帐号,或者业务机密等信息进行加密,以防止泄漏,coldfusion也提供了一对加解密函数,实现数据的加密.如下所示: <cfsetkey="@shark~softisland@@"> <CFSETencrypted=ENCRYPT(string,key)><!---加密---> <CFSETdecrypted=DECRYPT(encrypted,key)><!---解密---> 或者 <cfsetkey=GenerateSecretKey("DES")> <cfsetencrypted=Encrypt(string,Key,"DES","Base64")> <cfsetdecrypted=Decrypt(encrypted,Key,"DES","Base64")>注意:不能使用DECRYPT(encrypted,key)和DECRYPT(encrypted,key)来处理中文。使用Coldfusion本卷须知1,关于SQL注释,不要在使用<cfqueryparam的地方使用sql注释,例如: <cfquerydatasource="#DSN#">

updateUser

set

--Phone=<cfqueryparamcfsqltype="cf_sql_varchar" value="#form.phone#> 这样,偶尔会出现”Invalidparameterbinding(s)”错误. 可以使用<!---xxx--->进行注释2,一定要在<cfquery中使用<cfqueryparam标签,以防止SQL注入,但是请注意:在使用日期型数据时尽量不要用<cfqueryparam标签指定日期类型,因为系统被自动加上时区信息,建议使用‘’进行处理,例如: …wherecreatedate_datetime>‘#form.searhdate#’3,防止使用evaluate(),除非没有其他方法来写代码了(几乎总是有其他的方法来写代码)。4,使用struct.key或者struct[key],不要使用structFind(struct,key)。因为速度更快,可读性更好。使用Coldfusion本卷须知5,尽量不使用iif(),用cfif/cfelse取代iif(),效率更高,可读性也更好。6,Coldfusion中数据操作比字符串操作效率更高,但如果变量本是一个List,不要把List转变成一个array然后循环-因为总的速度不会快多少.7,针对大于64k的数据存储,需要在ColdfusionAdministrator中数据源选项中进行设置,在数据源编辑窗口中,点击“ShowAdvancedSettings”,设置”LongTextBuffer(chr)”或者BlobBuffer(bytes)”值,如:1024000。8,Coldfusion中默认开启了脚本保护功能,智能防止恶意代码,进入数据库之前会自动将<script>、<Iframe>、<Meta>等字符串进行替换,如果需要在某个目录下的代码中禁用脚本保护,比方将一些HTML及JS代码存入到数据库,可以参考以下代码: <cfifFindNoCase(‘HTMLCreate’,CGI.Script_Name)gt0> <cfapplicationScriptProtect=‘none’name=“web”

… <cfelse> <cfapplicationname=“web”

… </cfif>使用Coldfusion本卷须知9,Coldfusion会自动缓存Webservice,如果对Webservice进行了更新,需要去除Webservice缓存方能起效! 去除方法参考以下代码:

<!---得到系统中所有已经注册的WebService---> <cfobjectaction=“create” type=“java”

name=“factory” class=“coldfusion.server.ServiceFactory”> <cfsetxmlRpc=factory.getXMLRPCService()> <cfsetwebServices=xmlRpc.mappings> <cfloopitem=‘ws’collection=‘#webServices#’> <!---刷新注册信息---> <cfsetxmlRpc.refreshWebservice(ws)> <!---删除注册信息---> <cfsetxmlRpc.unregisterWebservice(ws)> </cfloop>JS在IE及Firefox常见兼容问题1,取得对象 IE:document.formName.item("itemName") FF:document.formName.elements["elementName"] IE:document.forms(“formName”)

document.getElementsByName(“inputName”)(1)

FF:document.forms[“formName”]

document.getElementsByName(“inputName”)[1]

IE:document.[对象ID] FF:document.getElementById([对象ID])

建议: *尽量使用对象ID属性,比方<inputname=‘n1’id=‘n1’> *总是使用document.getElementById([对象ID])取得对象,包括Iframe

*使用[]作为下标运算JS在IE及Firefox常见兼容问题2,捕捉window.event事件IE中可以使用window.eventFF中event只能在事件发生的现场使用,可以改写成事件=函数(event);functionsomemethod(evt){ evt=evt?evt:(window.event?window.event:null); alert(evt);}例如:<inputonclick=somemethod(event)>取得事件的坐标使用event.clientX/clientY,因为Firefox不支付event.x/y3,showModalDialog子窗口

IE中可以用showModalDialog一个子窗口,并获得返回值.

FF中没有showModalDialog,但可以用window.open来实现.

例如:

在Main.cfm文件中有如下代码:

JS在IE及Firefox常见兼容问题functionShowItemList(Obj){ if(document.all){//IE

varReturnValue=window.showModalDialog("ItemList.cfm?Id=321", "self","dialogwidth:600px;status:false");

if(typeOf(ReturnValue)!='undefined')

Obj.value=ReturnValue;

}

else{

varsubwin=window.open(subwin.cfm?id=321, 'newWin','modal=yes,width=600px');

}

}

functionReturnValue(ReturnValue){

Obj=document.getElementById('elementname');

Obj.value=ReturnValue;

}

JS在IE及Firefox常见兼容问题如果需要得到返回值.需要用到window.open的参数modal=yes,而且必须在子窗口中向母窗口传值(window.opener).

例如在subwin.cfm中参加以下代码:

functionReturnThisValue(){

w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论