 |
|
|
Creating objects
ASP is based on scripting languages, such as VBScript
and JScript. These languages are the glue that holds an ASP
page together. Scripting allows you to instantiate server-side
objects, which add dynamic content to your HTML pages. If
you've used scripting languages, you’ll find that the
ColdFusion language (ColdFusion Markup Language, or CFML)
is quite a bit different. First of all, ColdFusion objects
(tags) are all inherently active. With ASP, you must create
an instance of an object, use it, and then destroy it. With
ColdFusion, you use ColdFusion tags, but you don't need to
create or destroy them. When you put a CFML tag on a
page, the ColdFusion server instantiates it, and takes care
of the cleanup. The code samples below demonstrate the
differences between ASP and ColdFusion.
With ASP, you would use the following code to create a
recordset object:
<%
set rsGetOrders = Server.CreateObject("ADODB.Recordset")
rsGetOrders.ActiveConnection = "northwind"
rsGetOrders.Source = "SELECT CustomerID, OrderDate from Orders"
rsGetOrders.CursorLocation = 2
rsGetOrders.LockType = 3
rsGetOrders.Open()
rsGetOrders_numRows = 0
%>
You use the recordset on a page by manually looping through
your resultset (note that the following is VBScript):
<table>
<%
While (NOT rsGetOrders.EOF))
%>
<tr>
<td><%=(rsGetOrders.Fields.Item("CustomerID").Value)%></td>
<td><%=(rsGetOrders.Fields.Item("OrderDate").Value)%></td>
</tr>
<%
rsGetOrders.MoveNext()
Wend
%>
</table>
Finally, when you're done with the resultset, you destroy
the object and clear the memory space on the server (in
this example, you're setting rsGetOrders
= Nothing) as follows:
<%
rsGetOrders.Close()
Set rsGetOrders = Nothing
%>
Now, we'll do the same thing with ColdFusion code.
Remember that ColdFusion tags are the equivalent of a server-side
object in ASP. To perform the same process in ColdFusion,
use the cfquery tag instead of the recordset object you
would have used in ASP:
<cfquery name= "rsGetOrders" datasource= "northwind">
SELECT CustomerID, OrderDate FROM Orders
</cfquery>
This code creates the recordset. Displaying it is simple
with ColdFusion, since looping is built into the ColdFusion
tags. It’s unnecessary to manually start or
stop the loop as you did in ASP. You simply print the results
with a cfoutput tag, as follows:
<table>
<!---The cfoutput query prints the query results. Notice that the query
attribute specifies the query that it is outputting--->
<cfoutput query="rsGetOrders">
<tr>
<td>#rsGetOrders.CustomerID#</td>
<td>#rsGetOrders.OrderDate#</td>
</tr>
</cfoutput>
</table>
The ColdFusion code has several advantages that are evident
right from the start:
- It's shorter and more concise.
- It's easier to understand exactly what the code does,
even without programming knowledge.
- You don't need to write cleanup code, and you don’t
have to destroy your objects, because the ColdFusion server
handles those details.
- Although it's not apparent from the code, you can use
the recordset again and again on the same page without
resetting your pointers. ASP would required you
to use rsGetOrder.MoveFirst() to reset the pointer to
perform the same operation.
Using less code
Less code = less typing = more time for programming the
meat of your program. With ColdFusion, you're not spending
as much time on the mundane aspects, such as object creation,
keeping track of loops, and the closing and destroying of
objects. ColdFusion works like this across the board.
Take another example, sending e-mail. To send e-mail
with ColdFusion, use the following code:
<cfmail to="#form.tofield#"
from="admin@mywebsite.com"
subject="Your order has been placed">
<cfinclude template="message.cfm">
</cfmail>
Note that you would need to specify a mail server in the
ColdFusion administrator. This is as simple as entering
the mail server IP or internet address in the appropriate
setting in the ColdFusion administrator.
If you've ever sent e-mail from ASP, you know what's required.
First, you'd have to know which e-mail component is registered
on the server. This could be CDO, JMail, ASPMail, or any
number of other mail components. You may even have a host
that doesn’t have a mail component installed. In any
case, each component has a different syntax for instantiating
the object and a different syntax for using e-mail.
Needless to say, coding ASP for sending e-mail is involved.
Also note that in the ColdFusion example, that the body
of the message is included as a separate file. This could
just as easily have been hard-coded into the program, but
with ColdFusion, you can include files with the cfinclude
tag. This can be a great, added bonus. For one thing,
you can create conditional logic for the including the files.
In other words, you can access different includes files
based on criteria that you establish, such as a value in
a field from the database. You cannot do this in ASP, however.
For example, inside the ColdFusion message.cfm page, you
might have code that appears as follows:
<cfswitch expression = #rsGetAllEmails.emailtext#>
<cfcase value="A05">
<cfinclude template="orders_5day.cfm">
</cfcase>
<cfcase value="A15">
<cfinclude template="orders_15day.cfm">
</cfcase>
<cfcase value="A30">
<cfinclude template="orders_30day.cfm">
</cfcase>
<cfcase value="A45">
<cfinclude template="orders_45day.cfm">
</cfcase>
</cfswitch>
Using conditional includes can be extremely useful in maintaining
your application. Using include files in ColdFusion causes
no performance degradation, so you can package your logic
within them. Later, you'll see
how you can make your code even more flexible in the discussion
on ColdFusion Components, a new feature in ColdFusion MX.
ASP objects
ColdFusion has always had a rich set of built-in tags
to work with, but as an added bonus, you can also use traditional
ASP objects in ColdFusion by using the cfobject
tag or the CreateObject() function within the cfscript tags.
For example, you can use components you created in Visual
Basic for your ASP pages on your ColdFusion pages too. ColdFusion
creates the objects using the cfobject tag and accesses the
properties and methods using the cfscript tag in the
same way that you would do so with an ASP scripting language.
The bonus here is that if you already have objects that contain
your business logic, you can use those objects in ColdFusion,
thereby shortening the time required to create your application
in ColdFusion.
One thing that will become apparent after you've created
a couple of ColdFusion sites -- most of the functionality
that requires the use of objects, or third party components
in ASP, is built into the ColdFusion language using the
tag-based syntax. A few of the more powerful ColdFusion
tags (some of them are new to ColdFusion MX) are listed
below:
|
| CFCOMPONENT |
Creates and
defines a component object; encloses functionality that
you build in CMFL within in cffunction tags and makes
it available to any ColdFusion page on your ColdFusion
Server or other remote services, such as web services,
Macromedia Flash MX, and so forth. New feature
in ColdFusion MX. Read more about this in the
ColdFusion Developer Center |
| CFCHART |
Create complex
charts and graphs in Flash, JPG, or PNG on the fly from
your database queries (or other types of queries as
well). New feature in ColdFusion MX. Read
more about this in Tim Buntel's Basic Charting and Graphing with ColdFusion MX. |
| CFXML |
Create an
XML document easily. Additionally, new ColdFusion
XML functions enable you to parse and search XML easily.
New feature in ColdFusion MX. Read more about
this in Nate Weiss's Utilizing
XML and XSLT in ColdFusion MX PDF (528k). |
| CFDUMP |
Dumps a
complete variable, structure, or query to the page for
debugging your CF pages. It’s especially handy
for dumping a complete result set to the page in a nicely
formatted table. Helpful in testing and debugging. |
| CFDIRECTORY |
Gives you
complete access to any directory on your hard drive
for listing, creating, deleting, or renaming directories. |
| CFFILE |
Gives you
complete access to files on your server, including the
ability to upload, move, rename, copy, delete, read,
read binary, write, or append, all from one simple tag. |
| CFREGISTRY |
Read and
write to the Windows registry. |
| CFEXECUTE |
Executes
a program, batch file, or other executable on the server. |
| CFPOP |
Manage and
retrieve e-mail messages from a POP email server. |
|
New features in ColdFusion MX
ColdFusion MX is a new release of a die-hard product that
has been completely redesigned from the ground up. This version
of ColdFusion is Java-based, but works almost entirely like
the previous versions of ColdFusion. ColdFusion tags -- with
very few exceptions -- work in exactly the same manner as
described in this article. In fact, most applications created
in previous versions of ColdFusion will run without
modification.
One of the biggest new developments in ColdFusion MX is
that you can use JSP tag libraries with your ColdFusion
pages. This means that a ColdFusion programmer can take
advantage of any existing tag libraries, as well as create
new ones. This is on top of all the ColdFusion tags and
COM objects that are already in a ColdFusion programmer’s
arsenal.
Another new, big feature in ColdFusion MX is ColdFusion
Components (CFCs). CFCs are self-documenting and
self-contained. You can use CFCs through any ColdFusion
pages on the ColdFusion server. Other technologies
can access your ColdFusion components if you publish them
as web services (for instance, a Macromedia Flash application
may use a ColdFusion component to run a database query based
on a user's request).
Create CFCs with the cfcomponent tag, and save them with
a CFC extension. Include your CFML logic (such as
a cfquery tag, conditional code, and so forth) within a
cffunction tag inside of the cfcomponent tag inside the
CFC file. Then, any ColdFusion page on your server
can call the functions (also called methods) within the
CFC. For full details on how to use CFCs, refer to
the other articles in the ColdFusion Developer Center,
and to the ColdFusion MX documentation book, Developing
ColdFusion MX applications.
Developing ColdFusion components that produce web services
has one major advantage over producing web services in other
technologies – you can create a ColdFusion component
web service with standard CFML code in a fraction of the
time. Simply add the attribute access=remote to the
cffunction tag to activate the CFC as a web service.
The following is a simple CFC that reads the contents of
a directory and returns a list of JPG files in that directory:
><cfcomponent>
<cffunction name="getJPGList" returnType="string">
<cfdirectory name="fileList"
action="list"
directory="H:\public_jpegs"
filter="*.jpg">
<cfreturn #ValueList(fileList.name)#>
</cffunction>
</cfcomponent>
Save this file as getFiles.cfc (Note: You'll need to change
the directory based on your directory structure). You can
use this CFC on your ColdFusion page to get a comma-separated
list of all JPEG files in the H:\public_jpegs directory.
To invoke the CFC on a ColdFusion page, use this simple
code:
<cfinvoke component="getFiles" method="getJPGList"
ReturnVariable ="theList"/>
After the cfinvoke tag, use the variable, theList, which
contains the entire directory of JPEGs. Transform this simple
component into a web service. Doing so makes the information
accessible to anyone on the Internet using any capable technology.
Simply add access="remote" to the cffunction tag
in the CFC. ColdFusion MX takes care of all the details,
including creating the WDSL file for you. You've successfully
published a web service that lists the contents of one of
your directories. This was a simple example. Yet,
compared to that of another language, it illustrates the
simplicity and power inherent in ColdFusion code.
Read more about using ColdFusion components in the ColdFusion Developer Center.
Summary
ASP is certainly a viable technology to build Web applications,
but for ASP programmers who wish to make the change to ColdFusion,
the transition can be an easy one. You'll find that applications
that once took days can be done in hours, and calls to third-party
components can be a thing of the past. CFML is a versatile
language that is self-contained, easy-to-learn, and promotes
rapid application development. Also, with the new additions
of JSP tag libraries, ColdFusion Components, XML functionality,
and web services in ColdFusion MX, ColdFusion is more versatile
than ever before.
|
|
|
About the author
Tom Muck is co-author of three UltraDev books including
the bestseller, Dreamweaver
UltraDev4: The Complete Reference. He is an extensibility
expert focused on the integration of Macromedia products
with ColdFusion and other languages, applications, and technologies.
Tom has been recognized for this expertise as the 2000 recipient
of Macromedia's Best UltraDev Extension Award. He
also authors articles and speaks at conferences on this
and related subjects. As Senior Applications Developer
for Integram in Northern Virginia, Tom develops back-end
applications for expedited, electronic communications. Tom
also runs the Basic-UltraDev
site with co-author Ray West and is an advisor for MX
inSite magazine.
|
|
|
|
|
|