ColdFusion学习日志

Coldfusion简介

Coldfusion :百度翻译成冷聚变,是由 Allaire 公司开发的一种应用服务器平台,其运行的 CFMLColdFusion 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常用属性》

  1. name:指定锁的名称,用于标识要锁定的资源。
  2. scope:指定锁的范围,可以是 application(应用范围)、session(会话范围)、request(请求范围)。
  3. type:指定锁的类型,常见的有 exclusive(排他锁,只允许一个进程持有锁)、readonly(只读锁,允许多个进程同时持有)。
  4. 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>
  1. 首先设置了数据源 datasource 。
  2. 然后使用 <cfquery> 执行了一个查询语句,从 users 表中选择所有数据,并将结果存储在名为 getUsers 的查询变量中。
  3. 最后使用 <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> 使用的场景》

  1. 定义和调用函数:当您需要创建可重用的代码块或执行特定的计算逻辑时,可以在 <cfscript> 中定义函数,并在需要的地方调用它们。

  2. 复杂的条件判断和循环:如果您有复杂的逻辑条件或需要执行多次的循环操作,<cfscript> 可以提供更类似于传统编程语言的语法,使代码更清晰和易于管理。

  3. 变量操作和数据处理:进行变量的初始化、赋值、类型转换、数据计算和处理时,<cfscript> 可以提供更简洁和直观的方式。

  4. 对象操作:处理 ColdFusion 中的对象、结构体等数据结构,进行属性设置、方法调用等操作。

  5. 与其他服务器端代码的集成:如果您需要与其他服务器端技术或库进行集成,使用 <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>

示例流程:

  1. 首先设置了数据源。
  2. 在 <cftransaction> 标签内执行数据库操作。
  3. 使用 <cftry> 和 <cfcatch> 来处理可能出现的错误。
  4. 如果没有错误,使用 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:附件的路径。
  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值