Coldfusion简介
Coldfusion :百度翻译成【冷聚变】,是由 Allaire 公司开发的一种应用服务器平台,其运行的 CFML(ColdFusion Markup Language) 针对Web应用的一种脚本语言。
文件以*.cfm为文件名,在ColdFusion专用的应用服务器环境下运行。现在被Adobe收购了。
Coldfusion 只支持.cfm文件和.cfc文件(组件文件),Coldfusion 服务器最终把这两个文件解析成标准的 html 返回给浏览器。
Coldfusion服务器部署
将工程的目录直接拷贝到D:\Tools\ColdFusion(ColdFusion目录)\cfusion\wwwroot下
进入ColdFusion控制台,设置工程目录和ColdFusion服务器的镜像关系
論理パス 逻辑路径 访问时输入的URL
ディレクトリパス 目录路径 项目所在位置
直接运行相应的URL即可访问页面。
ColdFusion的特点
优点
1.CFML语言解析会比jsp加载速度快,性能方面更强。
2.ColdFusion服务器除了实现Web服务器的基本功能,还集成了一些常用的应用服务。如:mail Server,websocket, PDFservice,cloud部署等。
3.支持多种数据库的连接,包括Oracle、PostgerSQL、DB2等。
4.自带标签库,提供丰富的标签,使用起来非常方便。
5.CFML语言.cfm文件不需要特殊编译,而是交给ColdFusion服务器处理,解析成标准的HTML。因此不用特殊的工具,记事本就可以编写。不需要特殊构筑开发环境。
缺点
1.语法比较别扭。大于小于等于,与或非等等斗鱼传统的JAVA语法不一样。
2.像ADOBE一样是收费的。一个小型的项目,托管服务每月几十美金。
ColdFusion标签库
1. <cfset>
在CFML中设置一个值。用于创建变量(如果不存在),并为其赋值。也用于调用函数。
<cfset name = "John">
<cfset age = 25>
<cfset salary = 5000.50>
2. <cfoutput></cfoutput>
显示可以包含处理CFML变量和函数的结果的输出。可以遍历数据库查询的结果。
<cfoutput>
Name: #name#<br>
Age: #age#<br>
Salary: #salary#
</cfoutput>
3. <cfheader>、<cfcontent>
<!-- 生成自定义HTTP响应标头以返回给客户端。-->
<cfheader name=“内容处置”value=“附件;filename=”“#dlname#”“>
<!-- 是否执行以下任一操作或同时执行以下两项操作:*设置当前页面的MIME内容编码标头*将文件内容作为页面输出从服务器发送 -->
<cfcontent type=“应用程序/csv;name=”“#dlname#”“file=”#ExpandPath(”../menu/#dlname#“)#”deletefile=“no”>
-
<cfheader>
标签用于设置 HTTP 响应头name="Content-Disposition"
:指定响应头的名称为Content-Disposition
。value="attachment; filename=""#dlname#"""
:表示这是一个附件类型的响应,并指定了文件名,#dlname#
是一个变量,会在运行时被替换为实际的文件名。
-
<cfcontent>
标签用于设置响应的内容type="Application/csv; name=""#dlname#""
:指定响应内容的类型为 CSV 格式,并给出了名称(通过#dlname#
变量指定)。file="#ExpandPath("../menu/#dlname#")#"
:指定了要提供的文件的路径,ExpandPath
函数用于扩展和解析路径,#dlname#
是文件名的变量。deletefile="no"
:表示在提供完文件内容后不删除该文件。
4. <cfif></cfif>、<cfelse></cfelse>、<cfelseif></cfelseif>
分支逻辑标签,在CFML中创建简单和复合条件语句。测试表达式、变量、函数返回值或字符串。可选地与cfelse和cfelseif标签一起使用。类似if-else。
<cfif IsDefined("Form.color")>
<cfif Form.color EQ "red">
<cfset Variables.product = "apple">
<cfelseif Form.color EQ "green">
<cfset Variables.product = "banana">
<cfelse>
<cfset Variables.product = "orange">
</cfif>
<cfheader name="Content-Description" value="Product Info">
<cfcontent type="text/plain">
<cfoutput>#Variables.product#</cfoutput>
</cfif>
判断条件
大于、小于、等于(比较值)
<cfif 5 > 3>
5 大于 3
</cfif>
<cfif 3 < 5>
3 小于 5
</cfif>
<cfif 2 = 2>
2 等于 2
</cfif>
等于(比较字符串)
<cfif "apple" EQ "apple">
字符串相等
</cfif>
逻辑运算(与或非)
<cfif (condition1) AND (condition2)>
<!-- 当 condition1 和 condition2 都为真时执行这里的代码 -->
</cfif>
<cfif (condition1) OR (condition2)>
<!-- 当 condition1 或者 condition2 为真时执行这里的代码 -->
</cfif>
<cfif NOT (condition)>
<!-- 当 condition 为假时执行这里的代码 -->
</cfif>
验存(检查变量是否存在)
<cfif IsDefined("myVariable")>
变量 myVariable 已定义
</cfif>
函数做条件
<cfset today = Now()>
<cfif DayOfWeek(today) EQ 1>
今天是星期一
</cfif>
大于等于、小于等于
<cfset num1 = 5>
<cfset num2 = 10>
<cfif num1 GE 3>
<!-- 因为 5 大于等于 3,所以会执行这里 -->
num1 大于等于 3
</cfif>
<cfif num2 LE 15>
<!-- 因为 10 小于等于 15,所以会执行这里 -->
num2 小于等于 15
</cfif>
5. <cfparam>
测试参数的存在性,测试其数据类型,如果未分配默认值,则可选地提供一个。
<cfparam name=“Form.Pass”default=“”>
<cfparam>
标签用于定义参数
name="Form.Pass"
表示参数的名称为Form.Pass
。default=""
表示如果在后续代码中使用Form.Pass
时,且该参数未被传递或未被赋值,那么它将使用默认值空字符串""
。
6. <cfloop></cfloop>
根据循环类型需要不同的项目。根据需要列出的项目可能不取决于您的循环类型。循环形式:[query] [condition] [index + from + to ] [index + list] [collection + item ]([查询][条件][索引+从+到][索引+列表][集合+项目])
<!-- 一个1-5的循环,循环打印当前次数 -->
<cfoutput>
<cfloop index="i" from="1" to="5">
第 #i# 次循环<br>
</cfloop>
</cfoutput>
7. <CFLOCATION>
停止执行当前页面并打开CFML页面或HTML文件。
<CFIF Not IsDefined("Form.pass_id")>
<CFLOCATION URL="login.cfm">
</CFIF>
若Form.pass_id未被定义,停止当前页面,并转到login.cfm。
8. <CFINCLUDE>
<CFINCLUDE>
标签用于在当前的 ColdFusion 模板(CFML)中包含其他的 CFML 模板文件。
它的主要作用是实现代码的复用和模块化。通过使用 <CFINCLUDE>
,可以将常用的代码片段、页面布局部分或功能模块提取到单独的文件中,然后在需要的地方将其包含进来,从而减少代码重复,提高代码的可维护性和可读性。
包含的模板文件会在包含它的位置进行处理和执行,就好像其代码直接写在包含的位置一样。
<CFINCLUDE TEMPLATE="../COMMON/First_DB.cfm">
在当前 CFML 页面中包含另一个 CFML 模板文件(../COMMON/First_DB.cfm
)的内容。
在执行当前页面时,会将指定路径下的 First_DB.cfm
文件的内容插入到包含该语句的位置,并一起进行处理和执行。
9. <CFLOCK></CFLOCK>
确保共享数据的完整性。实例化以下类型的锁:*独占允许单线程访问CFML构造*只读允许多个请求访问CFML结构。
<cflock name="MyApplicationVariableLock" scope="application" type="exclusive" timeout="30">
<cfif not StructKeyExists(Application, "MyVariable")>
<cfset Application.MyVariable = 0>
</cfif>
<cfset Application.MyVariable = Application.MyVariable + 1>
</cflock>
<cfoutput>
当前 Application.MyVariable 的值: #Application.MyVariable#
</cfoutput>
在上述示例中,使用了排他锁(exclusive
)来确保在同一时间只有一个请求能够更新应用变量 Application.MyVariable
的值,避免了并发更新导致的数据不一致问题。如果获取锁的操作在 30 秒内无法成功,就会超时。
cflock常用属性》
name
:指定锁的名称,用于标识要锁定的资源。scope
:指定锁的范围,可以是application
(应用范围)、session
(会话范围)、request
(请求范围)。type
:指定锁的类型,常见的有exclusive
(排他锁,只允许一个进程持有锁)、readonly
(只读锁,允许多个进程同时持有)。timeout
:指定获取锁的超时时间,以秒为单位。如果在指定时间内无法获取锁,操作将超时。
10. <cftry><cfcatch></cfcatch>...</cftry>
<cftry>与一个或多个cfcatch标签一起使用。它们一起捕获和处理CFML页面中的异常。异常是指扰乱CFML页面中正常指令流的事件,如数据库操作失败、缺少包含文件和开发人员指定的事件。
<cfcatch>在cftry标签内使用。它们一起捕获和处理CFML页面中的异常。异常是指扰乱CFML页面中正常指令流的事件,如数据库操作失败、缺少包含文件和开发人员指定的事件。
<cftry>
<!-- 可能会抛出异常的代码 -->
<cfset result = 5 / 0>
<cfcatch type="any">
<!-- 处理异常的代码 -->
<cfoutput>
发生异常: #cfcatch.message# <br>
异常类型: #cfcatch.type#
</cfoutput>
</cfcatch>
</cftry>
在 cftry
块中的除法运算 5 / 0
会导致一个除零异常。这个异常会被 cfcatch
捕获,然后在 cfcatch
块中输出异常的相关信息,如异常消息 cfcatch.message
和异常类型 cfcatch.type
。
11. <cfquery></cfquery>
将查询或SQL语句传递给数据源。建议您在每个cfquery标记中使用cfqueryparam标记,以帮助保护您的数据库免受未经授权的用户的攻击。
<cfset datasource = "your_datasource_name">
<cfquery name="getUsers" datasource="#datasource#">
SELECT * FROM users
</cfquery>
<cfoutput>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
<cfloop query="getUsers">
<tr>
<td>#ID#</td>
<td>#Name#</td>
<td>#Email#</td>
</tr>
</cfloop>
</table>
</cfoutput>
- 首先设置了数据源
datasource
。 - 然后使用
<cfquery>
执行了一个查询语句,从users
表中选择所有数据,并将结果存储在名为getUsers
的查询变量中。 - 最后使用
<cfloop>
遍历查询结果并输出到表格中。
12. <cfcookie>
定义web浏览器cookie变量,包括过期和安全选项。
<cfcookie name = "LoginComp_CO"value = "#Variables.MyDb#"expires = "365">
<cookie>常用属性》
name
:指定 Cookie 的名称。value
:设置 Cookie 的值。expires
:指定 Cookie 的过期时间,可以是一个日期字符串(例如:"01 Jan 2025 00:00:00 GMT")或者一个以天为单位的整数,表示从当前时间开始的多少天后过期。domain
:指定 Cookie 所属的域。path
:指定 Cookie 有效的路径。secure
:如果设置为 "Yes",则 Cookie 仅通过安全的 HTTPS 连接发送。httponly
:如果设置为 "Yes",则 JavaScript 无法访问该 Cookie,有助于提高安全性。
12. <cfabort>
用于立即终止当前 ColdFusion 页面的处理,并向客户端返回一个错误状态。通常,它会导致页面的执行停止,并且可以自定义返回的错误代码和错误消息,以便向用户提供有关终止操作的相关信息。
<CFIF someCondition>
<CFABORT ERRORCODE="500" MESSAGE="Internal Server Error">
</CFIF>
13. <cfscript></cfscript>
包含一个包含cfscript语句的代码块。您不能在此标记中使用某些CFML保留字。您不能将名称以以下任何字符串开头的用户定义函数放入此标记中:cf、cf_、cf、CFML、CFML和_CFML
<cfscript>
function multiply(a, b) {
return a * b;
}
var num1 = 5;
var num2 = 10;
var result = multiply(num1, num2);
writeOutput(result);
</cfscript>
<cfscript> 使用的场景》
-
定义和调用函数:当您需要创建可重用的代码块或执行特定的计算逻辑时,可以在
<cfscript>
中定义函数,并在需要的地方调用它们。 -
复杂的条件判断和循环:如果您有复杂的逻辑条件或需要执行多次的循环操作,
<cfscript>
可以提供更类似于传统编程语言的语法,使代码更清晰和易于管理。 -
变量操作和数据处理:进行变量的初始化、赋值、类型转换、数据计算和处理时,
<cfscript>
可以提供更简洁和直观的方式。 -
对象操作:处理 ColdFusion 中的对象、结构体等数据结构,进行属性设置、方法调用等操作。
-
与其他服务器端代码的集成:如果您需要与其他服务器端技术或库进行集成,使用
<cfscript>
可以更方便地实现复杂的交互逻辑。
14. <cfswitch><cfcase></cfcase>...<cfdefaultcase></cfdefaultcase></cfswitch>
<cfswitch>计算传递的表达式,并将控制传递给与表达式结果匹配的cfcase标记。您可以选择编写一个cfdefaultcase标记,如果没有匹配的cfcase标记值,该标记将接收控制权。
<cfcase>仅在cfswitch标签体内使用。包含当cfswitch标记中指定的表达式具有一个或多个特定值时要执行的代码。
<cfdefaultcase>仅在cfswitch标签体内使用。包含当cfswitch标记中指定的表达式具有一个或多个特定值时要执行的代码。
<cfset myChoice = 2>
<cfswitch expression="#myChoice#">
<cfcase value="1">
<p>您选择了 1</p>
</cfcase>
<cfcase value="2">
<p>您选择了 2</p>
</cfcase>
<cfcase value="3">
<p>您选择了 3</p>
</cfcase>
<cfdefaultcase>
<p>没有匹配的选择</p>
</cfdefaultcase>
</cfswitch>
15. <cftransaction></cftransaction>
指示数据库管理系统将多个数据库操作视为单个事务。提供数据库提交和回滚处理。
<cfset datasource = "your_datasource_name">
<cftransaction>
<cftry>
<cfquery datasource="#datasource#">
UPDATE users SET status = 'active' WHERE id = 1
</cfquery>
<cfquery datasource="#datasource#">
INSERT INTO logs (message) VALUES ('User 1 activated')
</cfquery>
<cfcatch type="any">
<cftransaction action="rollback">
<cfoutput>Transaction rolled back: #cfcatch.message#</cfoutput>
</cftransaction>
</cfcatch>
</cftry>
<cfif NOT IsDefined("cfcatch")>
<cftransaction action="commit">
<cfoutput>Transaction committed successfully</cfoutput>
</cftransaction>
</cfif>
</cftransaction>
示例流程:
- 首先设置了数据源。
- 在
<cftransaction>
标签内执行数据库操作。 - 使用
<cftry>
和<cfcatch>
来处理可能出现的错误。 - 如果没有错误,使用
action="commit"
提交事务;如果有错误,使用action="rollback"
回滚事务。
16. <cfform></cfform>
使用CFML自定义控件标签构建表单;这些提供了比标准HTML表单输入元素更多的功能。
<cfform action="processForm.cfm" method="post">
<label for="username">用户名:</label>
<cfinput type="text" name="username" id="username"><br>
<label for="password">密码:</label>
<cfinput type="password" name="password" id="password"><br>
<label for="gender">性别:</label>
<cfselect name="gender" id="gender">
<cfoption value="male">男</cfoption>
<cfoption value="female">女</cfoption>
</cfselect><br>
<label for="description">描述:</label>
<cftextarea name="description" id="description" rows="5" cols="30"></cftextarea><br>
<cfinput type="submit" value="提交">
</cfform>
<cfform>
常用的属性:
action
:指定表单提交后处理数据的页面或脚本的 URL。method
:指定表单提交数据的方法,常见的有post
(数据包含在请求体中)和get
(数据附加在 URL 中)。
<cfform>
中常用的子标签:
<cfinput>
:用于创建各种类型的输入字段,如文本框、密码框、单选按钮、复选框等。<cfselect>
:创建下拉选择框。<cftextarea>
:创建多行文本输入区域。
17. <cfprocessingdirective></cfprocessingdirective>
向CFML提供以下有关如何处理当前页面的信息:*指定是否从标记体中的CFML生成的内容中删除多余的空白字符。*标识页面内容的字符编码(字符集)。
<CFProcessingDirective pageEncoding="UTF-8">
<!-- 这里是您的 ColdFusion 代码 -->
</CFProcessingDirective>
常用的属性:
pageEncoding
:指定页面的字符编码,如 "UTF-8"、"GBK" 等。enableCFOutputOnly
:设置是否仅允许<cfoutput>
标签进行输出。setClientCookies
:控制是否允许设置客户端 Cookie。
18. <cffile>
标签主要用于文件操作,例如文件的上传、下载、读取、写入、删除等。
<!-- 文件上传 -->
<cfform action="upload.cfm" enctype="multipart/form-data">
<cfinput type="file" name="uploadFile">
<cfinput type="submit" value="上传">
</cfform>
<cffile action="upload" filefield="uploadFile" destination="uploads/" />
如上例所示,action="upload"
表示上传操作,filefield="uploadFile"
指定表单中文件输入字段的名称,destination="uploads/"
指定文件保存的目录。
<!-- 文件读取 -->
<cffile action="read" file="myfile.txt" variable="fileContent">
<cfoutput>#fileContent#</cfoutput>
如上例所示,action="read"
表示读取文件,file="myfile.txt"
指定要读取的文件路径,variable="fileContent"
将读取的内容存储到指定的变量中。
<!-- 文件删除 -->
<cffile action="delete" file="oldfile.txt">
如上例所示,action="delete"
表示删除文件,file="oldfile.txt"
指定要删除的文件路径。
常用的参数:
action
:指定要执行的文件操作,如 "upload"(上传)、"read"(读取)、"write"(写入)、"delete"(删除)等。file
:指定文件的路径。filefield
:在文件上传时,指定表单中文件输入字段的名称。destination
:在文件上传时,指定文件保存的目标目录。variable
:用于存储读取文件的内容。
19. <cfmail></cfmail>
使用SMTP服务器发送可选包含查询输出的电子邮件。
<cfmail
to="recipient@example.com"
from="sender@example.com"
subject="Hello from ColdFusion"
type="html">
<p>Hello!</p>
<p>This is a test email sent using ColdFusion.</p>
</cfmail>
常用的参数:
to
:接收邮件的地址,可以是一个或多个,用逗号分隔。from
:发送邮件的地址。subject
:邮件的主题。type
:邮件的类型,可以是text
(纯文本)或html
(HTML 格式)。cc
:抄送的邮件地址。bcc
:密送的邮件地址。attach
:附件的路径。