Externe gegevens laden

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

ActionScript 3.0 biedt manieren om gegevens uit externe bronnen te laden. Die bronnen kunnen statische inhoud bieden, zoals tekstbestanden, of dynamische inhoud die is gegenereerd door een webscript. De gegevens kunnen verschillende indelingen hebben en ActionScript biedt functionaliteit voor het decoderen en het openen van de gegevens. Tijdens het ophalen van gegevens kunt u ook gegevens naar de externe server verzenden.

De klasse URLRequest gebruiken

Veel API's die externe gegevens laden gebruiken de URLRequest-klasse om de eigenschappen van benodigde netwerkaanvragen te definiëren.

URLRequest-eigenschappen

U kunt de volgende eigenschappen van een URLRequest-object instellen in elke beveiligingssandbox:

Eigenschap

Beschrijving

contentType

Dit is het MIME-inhoudstype van alle gegevens die met de URL-aanvraag worden verzonden. Als er geen waarde voor contentType is ingesteld, worden waarden verzonden als application/x-www-form-urlencoded .

data

Een object dat gegevens bevat die met de URL-aanvraag moeten worden verzonden.

digest

Een tekenreeks waarmee het getekende Adobe-platformonderdeel wordt geïdentificeerd dat moet worden opgeslagen in (of opgehaald uit) de Adobe® Flash® Player-cache.

method

De HTTP-aanvraagmethode, zoals GET of POST. (Inhoud die in het beveiligingsdomein van de AIR-toepassing wordt uitgevoerd, kan andere tekenreeksen opgeven dan "GET" of "POST" voor de eigenschap method . Elke HTTP-term is toegestaan en "GET" is de standaardmethode. Zie Beveiliging in AIR .)

requestHeaders

De array van HTTP-aanvraagheaders die aan de HTTP-aanvraag moet worden toegevoegd. Merk op dat de machtigingen voor het instellen van bepaalde headers beperkt zijn in Flash Player en in AIR-inhoud die wordt uitgevoerd buiten de beveiligingssandbox van de toepassing.

url

Hiermee geeft u de URL op die moet worden aangevraagd.

In AIR kunt u aanvullende eigenschappen van de URLRequest-klasse instellen die alleen beschikbaar zijn voor AIR-inhoud die wordt uitgevoerd in de beveiligingssandbox van de toepassing. Inhoud in de toepassingssandbox kan ook URL's definiëren met behulp van nieuwe URL-schema's (die een aanvulling vormen op de standaardschema's zoals file en http ).

Eigenschap

Beschrijving

followRedirects

Hiermee geeft u aan of omleidingen moeten worden gevolgd ( true , de standaardwaarde) of niet ( false ). Deze eigenschap wordt alleen ondersteund in de sandbox van de AIR-toepassing.

manageCookies

Hiermee geeft u voor deze aanvraag aan of de HTTP-protocolstack cookies moet beheren ( true , de standaardwaarde) of niet ( false ). Het instellen van deze eigenschap wordt alleen ondersteund in de sandbox van de AIR-toepassing.

authenticate

Hiermee geeft u aan of verificatieverzoeken voor deze aanvraag moeten worden afgehandeld ( true ). Het instellen van deze eigenschap wordt alleen ondersteund in de sandbox van de AIR-toepassing. Standaard worden aanvragen geverifieerd. Dit kan ertoe leiden dat een verificatiedialoogvenster wordt weergegeven als de server referenties vereist. U kunt de gebruikersnaam en het wachtwoord ook instellen met de URLRequestDefaults-klasse. Zie Standaardwaarden voor URLRequest instellen (alleen voor AIR) .

cacheResponse

Hiermee geeft u aan of antwoordgegevens voor deze aanvraag in de cache moeten worden geplaatst. Het instellen van deze eigenschap wordt alleen ondersteund in de sandbox van de AIR-toepassing. Het antwoord wordt standaard in de cache geplaatst ( true ).

useCache

Hiermee geeft u aan of de lokale cache moet worden geraadpleegd voordat gegevens worden opgehaald door deze URLRequest. Het instellen van deze eigenschap wordt alleen ondersteund in de sandbox van de AIR-toepassing. Als de standaardwaarde ( true ) wordt aangehouden, wordt de lokale versie in de cache gebruikt, indien deze beschikbaar is.

userAgent

Hiermee geeft u de tekenreeks van de gebruikersagent op die in de HTTP-aanvraag moet worden gebruikt.

Opmerking: De klasse HTMLLoader heeft verwante eigenschappen voor instellingen die betrekking hebben op inhoud die wordt geladen door een HTMLLoader-object. Zie Informatie over de klasse HTMLLoader voor meer informatie.

Standaardwaarden voor URLRequest instellen (alleen voor AIR)

Met de klasse URLRequestDefaults kunt u de toepassingsspecifieke standaardwaarden van URLRequest-objecten definiëren. Met de volgende code worden bijvoorbeeld de standaardwaarden van de eigenschappen manageCookies en useCache ingesteld. De opgegeven waarden voor deze eigenschappen worden door alle nieuwe URLRequest-objecten gebruikt, in plaats van de normale standaardwaarden:

URLRequestDefaults.manageCookies = false; 
URLRequestDefaults.useCache = false;
Opmerking: De URLRequestDefaults-klasse wordt alleen gedefinieerd voor inhoud die in Adobe AIR wordt uitgevoerd. Deze klasse wordt niet ondersteund in Flash Player.

De klasse URLRequestDefaults bevat de methode setLoginCredentialsForHost() , waarmee u een standaard gebruikersnaam en een standaardwachtwoord kunt opgeven die moeten worden gebruikt voor een specifieke host. De host, die wordt gedefinieerd met de parameter hostname van de methode, kan bestaan uit een domein, zoals "www.example.com" , of uit een domein en een poortnummer, zoals "www.example.com:80" . Houd er rekening mee dat "example.com" , "www.example.com" en "sales.example.com" elk als een unieke host worden beschouwd.

Deze gebruikersgegevens worden alleen gebruikt als de server deze vereist. Als de gebruiker al is geverifieerd (bijvoorbeeld door het dialoogvenster voor verificatie te gebruiken), wordt de geverifieerde gebruiker niet gewijzigd door de methode setLoginCredentialsForHost() aan te roepen.

Met de volgende code wordt de standaardgebruikersnaam en -wachtwoord ingesteld voor aanvragen die naar www.example.com worden verzonden:

URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X"); 

De URLRequestDefaults-instellingen zijn alleen van toepassing op het huidige toepassingsdomein, met één uitzondering. De verificatiegegevens die zijn doorgegeven aan de methode setLoginCredentialsForHost() worden gebruikt voor aanvragen die in elk willekeurig toepassingsdomein zijn gemaakt met de AIR-toepassing.

Zie de klasse URLRequestDefaults in de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform voor meer informatie.

URI-schema's

De standaard-URI-schema's, zoals de onderstaande, kunnen worden gebruikt bij aanvragen die worden gemaakt vanuit een willekeurige beveiligingssandbox:

http: en https:

U kunt deze schema's gebruiken voor standaardinternet-URL's (op dezelfde manier waarop ze worden gebruikt in een webbrowser).

file:

Gebruik file: om de URL aan te geven van een bestand dat zich in het lokale bestandssysteem bevindt. Bijvoorbeeld:

file:///c:/AIR Test/test.txt 

U kunt in AIR ook de volgende schema's gebruiken wanneer u een URL definieert voor inhoud die in de beveiligingssandbox van de toepassing wordt uitgevoerd:

app:

Gebruik app: om een pad op te geven dat betrekking heeft op de hoofdmap van de geïnstalleerde toepassing. Het volgende pad verwijst bijvoorbeeld naar de submap resources van de map met de geïnstalleerde toepassing:

app:/resources 

Wanneer een AIR-toepassing wordt gestart met de ADL (AIR Debug Launcher), is de toepassingsmap de map waarin het descriptorbestand van de toepassing zich bevindt.

Voor de URL (en de eigenschap url ) voor een File-object dat met File.applicationDirectory is gemaakt, wordt het URI-schema app gebruikt, zoals hierna wordt geïllustreerd:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("assets"); 
trace(dir.url); // app:/assets 

app-storage:

Gebruik app-storage: om een pad op te geven dat betrekking heeft op de gegevensopslagmap van de toepassing. Voor elke geïnstalleerde toepassing (en voor elke gebruiker) maakt AIR een unieke toepassingsopslagmap. Dit is een nuttige plaats om gegevens op te slaan die specifiek voor deze toepassing. Het volgende pad verwijst bijvoorbeeld naar het bestand prefs.xml in de submap Settings van de opslagmap van een toepassing:

app-storage:/settings/prefs.xml 

Voor de URL (en de eigenschap url ) voor een File-object dat met File.applicationStorageDirectory is gemaakt, wordt het URI-schema app-storage gebruikt, zoals hierna wordt geïllustreerd:

var prefsFile:File = File.applicationStorageDirectory; 
prefsFile = prefsFile.resolvePath("prefs.xml"); 
trace(dir.prefsFile); // app-storage:/prefs.xml 

mailto:

U kunt het mailto-schema gebruiken in URLRequest-objecten die worden doorgegeven naar de functie navigateToURL() . Zie Een URL openen in een andere toepassing .

U kunt een URLRequest-object dat een van deze URI-schema's gebruikt, gebruiken om de URL-aanvraag te definiëren voor een aantal verschillende objecten, zoals een FileStream- of Sound-object. U kunt deze schema's ook gebruiken in HTML-inhoud die in AIR wordt uitgevoerd. Zo kunt u de schema's gebruiken in het kenmerk src van de tag img .

U kunt deze AIR-specifieke URI-schema's ( app: en app-storage: ) echter alleen gebruiken in inhoud in de beveiligingssandbox van de toepassing. Zie Beveiliging in AIR voor meer informatie.

URL-variabelen instellen

Het is natuurlijk mogelijk om variabelen direct toe te voegen aan de URL-tekenreeks, maar vaak is het gemakkelijker om de variabelen die nodig zijn voor een aanvraag te definiëren met de URLVariables-klasse.

U kunt op drie manieren parameters toevoegen aan een URLVariables-object:

  • Binnen de URLVariables-constructor

  • Met de methode URLVariables.decode()

  • Als dynamische eigenschappen van het URLVariables-object zelf

In het volgende voorbeeld worden de drie methoden geïllustreerd. Ook ziet u hoe u de variabelen kunt toewijzen aan een URLRequest-object:

var urlVar:URLVariables = new URLVariables( "one=1&two=2" ); 
urlVar.decode("amp=" + encodeURIComponent( "&" ) ); 
urlVar.three = 3; 
urlVar.amp2 = "&&"; 
trace(urlVar.toString()); //amp=%26&amp2=%26%26&one=1&two=2&three=3 
 
var urlRequest:URLRequest = new URLRequest( "http://www.example.com/test.cfm" ); 
urlRequest.data = urlVar;

Wanneer u variabelen definieert in de URLVariables-constructor of in de URLVariables.decode() -methode, moet u de tekens die een speciale betekenis hebben in een URI-tekenreeks coderen met een URL-code. Als u bijvoorbeeld een en-teken (&) gebruikt in een parameternaam of -waarde, moet u dit teken coderen door het te wijzigen van & in %26 . Het en-teken fungeert namelijk als scheidingsteken voor parameters. Hiervoor kunt u de encodeURIComponent() -functie op het bovenste niveau gebruiken.

De klasse URLLoader gebruiken

Met de URLLoader -klasse kunt u een aanvraag indienen bij een server en hebt u toegang tot de geretourneerde informatie. Met de URLLoader-klasse hebt u ook toegang tot bestanden in het lokale bestandssysteem in contexten waar toegang tot lokale bestanden is toegestaan (zoals bij de Flash Player-sandbox Lokaal-met-bestandssysteem en de AIR-toepassingssandbox). De klasse URLLoader downloadt gegevens via een URL als tekst, binaire gegevens of URL-gecodeerde variabelen. De klasse URLLoader verzendt gebeurtenissen zoals complete , httpStatus , ioError , open , progress en securityError .

Het gebeurtenisafhandelingsmodel van ActionScript 3.0 is aanzienlijk anders dan het model van ActionScript 2.0, dat gebruikmaakte van de gebeurtenishandlers LoadVars.onData , LoadVars.onHTTPStatus en LoadVars.onLoad . Zie Gebeurtenissen afhandelen voor meer informatie over gebeurtenisafhandeling in ActionScript 3.0.

De gedownloade gegevens zijn pas beschikbaar nadat het downloaden is voltooid. U kunt de downloadvoortgang (geladen bytes en totale aantal bytes) volgen door te luisteren naar de gebeurtenis progress die moet worden verzonden. Als een bestand snel wordt geladen, is het mogelijk dat de gebeurtenis progress niet wordt verzonden. Wanneer een bestand zonder problemen is gedownload, wordt de gebeurtenis complete verzonden. Als u de eigenschap URLLoader dataFormat instelt, ontvangt u de gegevens als tekst, als binaire gegevens met de indeling RAW of als een URLVariables-object.

De methode URLLoader.load() (en eventueel de constructor van de klasse URLLoader) gebruikt één parameter, namelijk request . Deze parameter is een URLRequest-object. Een URLRequest-object bevat alle informatie voor één HTTP-aanvraag, zoals de doel-URL, de aanvraagmethode ( GET of POST ), aanvullende headerinformatie en het MIME-type.

Als u bijvoorbeeld een XML-pakket naar een script op de server wilt uploaden, kunt u de volgende code gebruiken:

var secondsUTC:Number = new Date().time; 
var dataXML:XML =  
    <clock> 
        <time>{secondsUTC}</time> 
    </clock>; 
var request:URLRequest = new URLRequest("http://www.yourdomain.com/time.cfm"); 
request.contentType = "text/xml"; 
request.data = dataXML.toXMLString(); 
request.method = URLRequestMethod.POST; 
var loader:URLLoader = new URLLoader(); 
loader.load(request); 

Het voorgaande codefragment maakt een XML-document met de naam dataXML die het XML-pakket bevat dat naar de server moet worden gezonden. In het voorbeeld wordt de eigenschap URLRequest contentType ingesteld op "text/xml" en wordt het XML-document toegewezen aan de URLRequest data -eigenschap. Tot slot wordt in het voorbeeld een URLLoader-object gemaakt, waarna de aanvraag naar het externe script wordt verzonden met de methode load() .

De klasse URLStream gebruiken

De URLStream-klasse biedt tijdens het downloaden toegang tot de gegevens. Met de klasse URLStream kunt u bovendien een stream sluiten voordat deze geheel is gedownload. De gedownloade gegevens zijn beschikbaar als binaire gegevens met de indeling RAW.

Tijdens het lezen van de gegevens van een URLStream-object moet u de eigenschap bytesAvailable gebruiken om na te gaan of er voldoende gegevens zijn om te worden gelezen. Als u meer gegevens wilt lezen dan er beschikbaar zijn, treedt een EOFError-uitzondering op.

De httpResponseStatus-gebeurtenis (AIR)

In Adobe AIR verzendt de URLStream-klasse ook een httpResponseStatus -gebeurtenis (naast de httpStatus -gebeurtenis). De httpResponseStatus -gebeurtenis wordt vóór eventuele responsgegevens verzonden. De gebeurtenis httpResponseStatus (vertegenwoordigd door de HTTPStatusEvent-klasse) bevat de eigenschap responseURL . Dit is de URL van waaruit het antwoord is geretourneerd. De gebeurtenis bevat ook de eigenschap responseHeaders . Dit is een array van URLRequestHeader-objecten die de antwoordheaders vertegenwoordigen die door het antwoord zijn geretourneerd.

Gegevens uit externe documenten laden

Wanneer u dynamische toepassingen maakt, kan het nuttig zijn om gegevens te laden uit externe bestanden of serverscripts. Hiermee kunt u dynamische toepassingen maken zonder dat u uw toepassingen moet bewerken of opnieuw compileren. Als u bijvoorbeeld een toepassing voor een 'tip van de dag' maakt, kunt u een serverscript schrijven waarmee een willekeurige tip uit een database wordt opgehaald en eenmaal per dag wordt opgeslagen in een tekstbestand. Vervolgens kan uw toepassing de inhoud van een statisch tekstbestand laden in plaats van elke keer opnieuw query's uit te voeren.

Het volgende codefragment maakt een URLRequest- en URLLoader-object dat de inhoud van een extern tekstbestand, params.txt, laadt:

var request:URLRequest = new URLRequest("params.txt"); 
var loader:URLLoader = new URLLoader(); 
loader.load(request);
Als u geen aanvraagmethode definieert, laden Flash Player en Adobe AIR de inhoud standaard met de HTTP-methode GET . Als u de aanvraag wilt verzenden met de methode POST , stelt u de eigenschap request.method in op POST met behulp van de statische constante URLRequestMethod.POST , zoals wordt weergegeven in de volgende code:
var request:URLRequest = new URLRequest("sendfeedback.cfm"); 
request.method = URLRequestMethod.POST;

Het externe document params.txt dat tijdens de runtime wordt geladen, bevat de volgende gegevens:

monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

Het bestand bevat twee parameters: monthNames en dayNames . Elke parameter bevat een door komma’s gescheiden lijst die als tekenreeksen wordt geparseerd. U kunt deze lijst in een array splitsen met de methode String.split() .

Gebruik geen gereserveerde woorden of taalconstructies als variabelenamen in externe gegevensbestanden, omdat de code hierdoor moeilijker kan worden gelezen en fouten moeilijker kunnen worden opgespoord.
Zodra de gegevens zijn geladen, wordt de gebeurtenis complete verzonden en is de inhoud van het externe document beschikbaar voor gebruik in de eigenschap data van de URLLoader, zoals wordt weergegeven in de volgende code:
function completeHandler(event) 
{ 
    var loader2 = event.target; 
    air.trace(loader2.data); 
}

Als het externe document naam-waardeparen bevat, kunt u de gegevens parseren met de klasse URLVariables door de inhoud van het geladen bestand als volgt door te geven:

private function completeHandler(event:Event):void 
{ 
    var loader2:URLLoader = URLLoader(event.target); 
    var variables:URLVariables = new URLVariables(loader2.data); 
    trace(variables.dayNames); 
}

Elk naam-waardepaar uit het externe bestand wordt gemaakt als een eigenschap in het URLVariables-object. Elke eigenschap in het variabelenobject in het voorgaande codevoorbeeld wordt als een tekenreeks behandeld. Als de waarde van het naam-waardepaar een lijst met items is, kunt u de tekenreeks in een array omzetten door als volgt de methode String.split() op te roepen:

var dayNameArray:Array = variables.dayNames.split(",");
Als u numerieke gegevens laadt uit externe tekstbestanden, moet u de waarden omzetten in numerieke waarden door gebruik te maken van een functie op hoofdniveau, zoals int() , uint() of Number() .

In plaats van de inhoud van het externe bestand als tekenreeks te laden en een nieuwe object URLVariables te maken, zou u de eigenschap URLLoader.dataFormat kunnen instellen op een van de statische eigenschappen in de klasse URLLoaderDataFormat. De drie mogelijke waarden voor de eigenschap URLLoader.dataFormat zijn:

  • URLLoaderDataFormat.BINARY : de eigenschap URLLoader.data bevat binaire gegevens die zijn opgeslagen in een object ByteArray.

  • URLLoaderDataFormat.TEXT : de eigenschap URLLoader.data bevat tekst in een object String.

  • URLLoaderDataFormat.VARIABLES : de eigenschap URLLoader.data bevat URL-gecodeerde variabelen die zijn opgeslagen in een object URLVariables.

In de volgende code ziet u hoe u gegevens die in een object URLVariables zijn opgeslagen, automatisch kunt parseren door de eigenschap URLLoader.dataFormat in te stellen op URLLoaderDataFormat.VARIABLES :

package 
{ 
    import flash.display.Sprite; 
    import flash.events.*; 
    import flash.net.URLLoader; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequest; 
 
    public class URLLoaderDataFormatExample extends Sprite 
    { 
        public function URLLoaderDataFormatExample() 
        { 
            var request:URLRequest = new URLRequest("http://www.[yourdomain].com/params.txt"); 
            var variables:URLLoader = new URLLoader(); 
            variables.dataFormat = URLLoaderDataFormat.VARIABLES; 
            variables.addEventListener(Event.COMPLETE, completeHandler); 
            try 
            { 
                variables.load(request); 
            }  
            catch (error:Error) 
            { 
                trace("Unable to load URL: " + error); 
            } 
        } 
        private function completeHandler(event:Event):void 
        { 
        var loader:URLLoader = URLLoader(event.target); 
        trace(loader.data.dayNames); 
        } 
    } 
}
Opmerking: De standaardwaarde voor URLLoader.dataFormat is URLLoaderDataFormat.TEXT .

Het laden van XML uit een extern bestand staat gelijk aan het laden van URLVariables, zoals in het volgende voorbeeld wordt geïllustreerd. U kunt een URLRequest- en een URLLoader-instantie maken en deze gebruiken om een extern XML-document te downloaden. Wanneer het bestand volledig is gedownload, wordt de gebeurtenis Event.COMPLETE verzonden, waarna de inhoud van het externe bestand wordt omgezet in een XML-instantie, die u kunt parseren met XML-methoden en -eigenschappen.

package 
{ 
    import flash.display.Sprite; 
    import flash.errors.*; 
    import flash.events.*; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
 
    public class ExternalDocs extends Sprite 
    { 
        public function ExternalDocs() 
        { 
            var request:URLRequest = new URLRequest("http://www.[yourdomain].com/data.xml"); 
            var loader:URLLoader = new URLLoader(); 
            loader.addEventListener(Event.COMPLETE, completeHandler); 
            try 
            { 
                loader.load(request); 
            } 
            catch (error:ArgumentError) 
            { 
                trace("An ArgumentError has occurred."); 
            } 
            catch (error:SecurityError) 
            { 
                trace("A SecurityError has occurred."); 
            } 
        } 
        private function completeHandler(event:Event):void 
        { 
            var dataXML:XML = XML(event.target.data); 
            trace(dataXML.toXMLString()); 
        } 
    } 
}

Communiceren met externe scripts

U kunt de klasse URLVariables niet alleen gebruiken om externe gegevensbestanden te laden, maar ook om variabelen te verzenden naar een serverscript en de reactie van de server te verwerken. Dit is bijvoorbeeld handig als u een spel programmeert en de score van de gebruiker naar een server wilt verzenden, waarna kan worden berekend of de gebruiker aan de lijst met topscores moet worden toegevoegd. U kunt zelfs de aanmeldingsgegevens van de gebruiker voor verificatie naar een server verzenden. Een serverscript kan de gebruikersnaam en het wachtwoord verwerken, deze met een database vergelijken en een bevestiging terugsturen waarin wordt aangegeven of de gebruikersgegevens geldig zijn.

In het volgende codefragment wordt een object URLVariables met de naam variables gemaakt, dat een nieuwe variabele met de naam name maakt. Vervolgens wordt een URLRequest-object gemaakt dat de URL aangeeft van het serverscript waar de variabelen naartoe moeten worden verzonden. Vervolgens stelt u de eigenschap method van het URLRequest-object zo in dat de variabelen als de HTTP-aanvraag POST worden verzonden. U voegt het URLVariables-object aan de URL-aanvraag toe door de eigenschap data van het URLRequest-object in te stellen op het URLVariables-object dat u eerder hebt gemaakt. Tot slot wordt de URLLoader-instantie gemaakt en wordt de methode URLLoader.load() opgeroepen, die de aanvraag activeert.

var variables:URLVariables = new URLVariables("name=Franklin"); 
var request:URLRequest = new URLRequest(); 
request.url = "http://www.[yourdomain].com/greeting.cfm"; 
request.method = URLRequestMethod.POST; 
request.data = variables; 
var loader:URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
loader.addEventListener(Event.COMPLETE, completeHandler); 
try 
{ 
    loader.load(request); 
} 
catch (error:Error) 
{ 
    trace("Unable to load URL"); 
} 
 
function completeHandler(event:Event):void 
{ 
    trace(event.target.data.welcomeMessage); 
}

De volgende code bevat de inhoud van het Adobe ColdFusion®-document greeting.cfm, dat in het vorige voorbeeld wordt gebruikt:

<cfif NOT IsDefined("Form.name") OR Len(Trim(Form.Name)) EQ 0> 
    <cfset Form.Name = "Stranger" /> 
</cfif> 
<cfoutput>welcomeMessage=#UrlEncodedFormat("Welcome, " & Form.name)# 
</cfoutput>