Harici verileri yükleme

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

ActionScript 3.0, harici kaynaklardan veri yüklenmesine yönelik mekanizmalar içerir. Bu kaynaklar metin dosyaları gibi statik içerik veya bir web komut dosyası tarafından oluşturulan dinamik içerik olabilir. Veriler çeşitli yollarla biçimlendirilebilir ve ActionScript verilere ilişkin kod çözme ve erişim işlevleri sağlar. Veri alma işleminin parçası olarak, harici sunucuya veri de gönderebilirsiniz.

URLRequest sınıfını kullanma

Harici veri yükleyen çoğu API, gerekli ağ talebinin özelliklerini tanımlamak için URLRequest sınıfını kullanır.

URLRequest özellikleri

Bir URLRequest nesnesinin aşağıdaki özelliklerini her güvenlik sanal alanında ayarlayabilirsiniz:

Özellik

Açıklama

contentType

URL isteğiyle gönderilen her verinin MIME içerik türü. Herhangi bir contentType ayarlanmazsa, değerler application/x-www-form-urlencoded olarak gönderilir.

data

URL isteği ile aktarılacak olan verileri içeren bir nesne.

digest

Adobe® Flash® Player önbelleğine saklanacak (veya buradan alınacak) imzalanmış Adobe platformu bileşenini benzersiz şekilde tanımlayan bir dize.

method

Bir GET veya POST gibi HTTP istek yöntemi. (AIR uygulama etki alanında çalışan içerik, "GET" veya "POST" dışındaki dizeleri method özelliği olarak belirleyebilir. Tüm HTTP fiilleri olanaklıdır ve "GET" varsayılan yöntemdir. Bkz. AIR güvenliği .)

requestHeaders

HTTP istemine eklenecek HTTP istem başlıkları. Flash Player’da ve uygulama güvenliği sanal alanı dışında çalışan AIR içeriğinde bazı başlıkların ayarlanmasına yönelik izinlerin sınırlandırıldığını unutmayın.

url

İstenecek URL'yi belirtir.

AIR’de, URLRequest sınıfının yalnızca uygulama güvenliği sanal alanında çalışan AIR içeriğinin kullanabileceği ek özelliklerini ayarlayabilirsiniz. Uygulama sanal alanındaki içerik, yeni URL şemalarını ( file ve http gibi standart şemalara ek olarak) kullanarak URL’leri de tanımlayabilir.

Özellik

Açıklama

followRedirects

Yeniden yönlendirmelerin takip edilip ( true , varsayılan değer) edilmeyeceğini ( false ) belirtir. Bu yalnızca AIR uygulama sanal alanında desteklenir.

manageCookies

HTTP protokol yığınının bu istek için tanımlama bilgilerini yönetmesi gerekip ( true , varsayılan değer) gerekmediğini ( false ) belirtir. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir.

authenticate

Kimlik doğrulama isteklerinin bu istek için işlenmesi gerekip ( true ) gerekmediğini belirtir. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir. Varsayılan, istekler için kimlik doğrulaması yapmaktır—sunucu kimlik bilgilerini gerektiriyorsa bu, kimlik doğrulama iletişim kutusunun görüntülenmesine neden olabilir. URLRequestDefaults sınıfını kullanarak kullanıcı adı ve şifreyi de ayarlayabilirsiniz—bkz. URLRequest varsayılanlarını ayarlama (yalnızca AIR) .

cacheResponse

Bu isteğe ilişkin yanıt verilerinin önbelleğe alınması gerekip gerekmediğini belirtir. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir. Varsayılan, yanıtı önbelleğe almaktır ( true ).

useCache

Bu URLRequest verileri almadan önce, yerel önbelleğe başvurulması gerekip gerekmediğini belirler. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir. Varsayılan ( true ), kullanılabiliyorsa yerel önbelleğe alınmış sürümü kullanmaktır.

userAgent

HTTP isteğinde kullanılacak kullanıcı aracısı dizesini belirtir.

Not: HTMLLoader sınıfı, HTMLLoader nesnesi tarafından yüklenen içeriğe ait ayarlara ilişkin özellikler içerir. Ayrıntılar için bkz. HTMLLoader sınıfı hakkında .

URLRequest varsayılanlarını ayarlama (yalnızca AIR)

URLRequestDefaults sınıfı URLRequest nesneleri için uygulamaya özel varsayılan ayarlarını tanımlamanızı sağlar. Örneğin, aşağıdaki kod manageCookies ve useCache özellikleri için varsayılan değerleri ayarlar. Tüm yeni URLRequest nesneleri normal varsayılanlar yerine bu özellikler için belirtilen değerleri kullanır:

URLRequestDefaults.manageCookies = false; 
URLRequestDefaults.useCache = false;
Not: URLRequestDefaults sınıfı Adobe AIR uygulamasında çalışan içerik için tanımlanır. Bu Flash Player'da desteklenmez.

URLRequestDefaults sınıfı, belirli bir ana bilgisayar için kullanmak üzere varsayılan bir kullanıcı adı ve parola belirlemenizi sağlayan setLoginCredentialsForHost() yöntemini içerir. Yöntemin hostname parametresinde tanımlanan ana bilgisayar, "www.example.com" gibi bir etki alanı veya "www.example.com:80" gibi bir etki alanı ve bir bağlantı noktası numarası olabilir. "example.com" , "www.example.com" ve "sales.example.com" öğelerinden her birinin benzersiz ana bilgisayarlar olarak dikkate alındığını unutmayın.

Bu kimlik bilgileri, yalnızca sunucu onları istediğinde kullanılır. Kullanıcı kimliği doğrulanmışsa (örneğin, kimlik doğrulama iletişim kutusunu kullanarak), setLoginCredentialsForHost() yöntemini çağırmak, doğrulanmış kullanıcıyı değiştirmez.

Aşağıdaki kod, www.example.com adresine gönderilen taleplerde kullanılacak varsayılan kullanıcı adı ve şifreyi belirler:

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

URLRequestDefaults ayarları bir istisna haricinde yalnızca geçerli uygulama etki alanı için geçerlidir. setLoginCredentialsForHost() yöntemine aktarılan kimlik bilgileri, AIR uygulaması içindeki herhangi bir uygulama etki alanında yapılan talepler için kullanılır.

Daha fazla bilgi için, Adobe Flash Platformu için ActionScript 3.0 Başvurusu 'ndaki URLRequestDefaults sınıfına bakın.

URI şemaları

Aşağıdaki gibi standart URI şemaları herhangi bir güvenlik sanal alanından yapılan taleplerde kullanılabilir:

http: ve https:

Standart İnternet URL’leri için bunları kullanın (bir web tarayıcısında kullanıldıkları şekilde).

file:

Yerel dosya sisteminde bulunan bir dosyanın URL’sini belirtmek için file: kullanın. Örneğin:

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

AIR’de, uygulama güvenlik sanal alanında çalışan içeriğe ilişkin URL’yi tanımlarken aşağıdaki şemaları da kullanabilirsiniz:

app:

Yüklü uygulamanın kök dizinine ilişkin bir yol belirlemek için app: öğesini kullanın. Örneğin, aşağıdaki yol yüklenen uygulama dizininin kaynaklar alt dizinine işaret eder:

app:/resources 

Bir AIR uygulaması AIR Debug Launcher (ADL) kullanılarak başlatıldığında, uygulama dizini uygulama açıklayıcı dosyasını içeren dizindir.

File.applicationDirectory öğesi ile oluşturulan bir File nesnesi URL'si (ve url özelliği), app URI şemasını aşağıdaki gibi kullanır:

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

app-storage:

Uygulamanın saklama dizinine ilişkin bir yol belirlemek için app-storage: öğesini kullanın. AIR her yüklenen uygulama için (ve kullanıcı), o uygulamaya özgü verilerin saklanmasına yönelik kullanışlı bir yer olan benzersiz bir uygulama depolama dizini tanımlar. Örneğin aşağıdaki yol, uygulama depolama dizininin ayarlar alt dizininde bulunan bir prefs.xml dosyasını işaret eder:

app-storage:/settings/prefs.xml 

File.applicationStorageDirectory kullanılarak oluşturulan bir File nesnesine ilişkin URL (ve url özelliği) app-storage URI şemasını aşağıdaki şekilde kullanır:

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

mailto:

navigateToURL() işlevine aktarılan URLRequest nesnelerindeki mailto şemasını kullanabilirsiniz. Bkz. Başka bir uygulamada URL açma .

FileStream veya Sound nesnesi gibi çeşitli nesnelere ilişkin URL isteği tanımlamak için bu URI şemalarından birini kullanan bir URLRequest nesnesini kullanabilirsiniz. Bu şemaları AIR'de çalışan HTML içeriğinde de kullanabilirsiniz; örneğin, bir img etiketinin src niteliğinde kullanabilirsiniz.

Ancak, AIR’ye özgü bu URL şemalarını ( app: ve app-storage: ) yalnızca uygulama güvenlik sanal alanındaki içerikte kullanabilirsiniz. Daha fazla bilgi için bkz. AIR güvenliği .

URL değişkenlerini ayarlama

Değişkenleri URL dizesine doğrudan ekleyebilmenize rağmen, bir talep için gereken herhangi bir değişkeni tanımlamak için URLVariables sınıfını kullanmak daha kolay olabilir.

Bir URLVariables nesnesine parametre eklemenin üç yolu vardır:

  • URLVariables yapıcısında

  • URLVariables.decode() yöntemiyle

  • URLVariables nesnesinin kendi içinde dinamik özellikler halinde

Aşağıdaki örnekte üç yöntem de gösterilmekte ve bir URLRequest nesnesine nasıl değişken atanacağı örneklendirilmektedir:

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;

Değişkenleri URLVariables yapıcısı içinde veya URLVariables.decode() yönteminde tanımlarken, bir URI dizesinde özel bir anlamı olan karakterleri URL kodlamasına tabi tuttuğunuzdan emin olun. Örneğin, bir parametre adı ya da değerde ampersan kullandığınızda, ampersanı & ’den %26 ’ya değiştirerek kodlamanız gerekir, çünkü ampersan parametreler için bir sınırlayıcı olarak hareket eder. En üst seviye encodeURIComponent() işlevi bu amaçla kullanılabilir.

URLLoader sınıfını kullanma

URLLoader sınıfı, bir sunucuya talep göndermenize ve verilen bilgilere ulaşmanıza izin verir. URLLoader sınıfını yerel dosya erişimine izin verilen bağlamlardaki (Flash Player dosya sistemiyle yerel sanal alanı ve AIR uygulaması sanal alanı gibi) yerel dosya sistemi üzerinde bulunan dosyalara erişmek için de kullanabilirsiniz. URLLoader sınıfı bir URL'den metin, ikili veri veya URL olarak kodlanmış değişkenler olarak veri indirir. URLLoader sınıfı complete , httpStatus , ioError , open , progress ve securityError gibi olaylar gönderir.

ActionScript 3.0 olay işleme modeli, LoadVars.onData , LoadVars.onHTTPStatus ve LoadVars.onLoad olay işleyicilerini kullanan ActionScript 2.0 modelinden büyük ölçüde farklıdır. ActionScript 3.0’da olayları işleme hakkında daha fazla bilgi edinmek için bkz. Olayları işleme

İndirilen veriler, indirme işlemi tamamlanana kadar kullanılamaz. progress olayının gönderilmesini dinleyerek indirmenin ilerlemesini (yüklenen baytlar ve toplam bayt) denetleyebilirsiniz. Ancak, bir dosya yeterince hızlı yüklenirse progress olayı gönderilmeyebilir. Bir dosya başarıyla yüklendiğinde complete olayı gönderilir. URLLoader dataFormat özelliğini ayarlayarak, verileri metin, ham ikili veri veya bir URLVariables nesnesi olarak alabilirsiniz.

URLLoader.load() yöntemi (ve isteğe bağlı olarak URLLoader sınıfının yapıcısı), URLRequest nesnesi olan tek bir parametre ( request ) alır. URLRequest nesnesi, hedef URL, istek yöntemi ( GET veya POST ), ek başlık bilgileri ve MIME türü gibi tek bir HTTP isteğinin tüm bilgilerini içerir.

Örneğin, sunucu tarafı komut dosyasına bir XML paketi yüklemek için aşağıdaki kodu kullanabilirsiniz:

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); 

Önceki kod parçası, sunucuya gönderilecek XML paketini içeren dataXML adında bir XML örneği oluşturur. Örnek, URLRequest contentType özelliğini "text/xml" olarak ayarlar ve XML belgesini URLRequest data özelliğine atar. Son olarak, örnek bir URLLoader nesnesi oluşturup load() yöntemini kullanarak uzak komut dosyasına talebi gönderir.

URLStream sınıfını kullanma

URLStream sınıfı indirme verileri geldiğinde bu verilere erişim sağlar. URLStream sınıfı ayrıca, indirmeyi tamamlamadan önce bir akışı kapatmanıza olanak verir. İndirilen veri, ham ikili veri olarak mevcuttur.

Bir URLStream nesnesinden veri okurken, okumadan önce yeterli verinin olup olmadığını belirlemek için bytesAvailable özelliğini kullanın. Mevcut olandan daha fazla veri okumaya çalışırsanız, EOFError istisnası atılır.

httpResponseStatus olayı (AIR)

Adobe AIR’de, URLStream sınıfı httpStatus olayına ek olarak bir httpResponseStatus olayı gönderir. httpResponseStatus olayı herhangi bir yanıt verisinden önce ulaştırılır. httpResponseStatus olayı (HTTPStatusEvent sınıfıyla ifade edilen), yanıtın döndüğü kaynak URL olan responseURL özelliğini ve yanıtın döndürdüğü yanıt başlıklarını temsil eden URLRequestHeader nesnesinin bir dizisi olan responseHeaders özelliğini içerir.

Harici belgelerden veri yükleme

Dinamik uygulamalar oluşturduğunuzda, harici dosyalardan veya sunucu tarafı komut dosyalarından veri yüklemek faydalı olabilir. Bu, uygulamanızı düzenlemeniz veya yeniden derlemeniz gerekmeden dinamik uygulamalar oluşturmanıza olanak sağlar. Örneğin, bir “günün ipucu” uygulaması oluşturuyorsanız, bir veritabanından rastgele bir ipucunu alıp her gün bir metin dosyasına kaydeden sunucu tarafı komut dosyası yazabilirsiniz. Daha sonra uygulamanız, her seferinde veritabanını sorgulamak yerine statik metin dosyasının içeriklerini yükleyebilir.

Aşağıdaki kod parçası, params.txt adında harici bir metin dosyasının içeriklerini yükleyen bir URLRequest ve URLLoader nesnesi oluşturur:

var request:URLRequest = new URLRequest("params.txt"); 
var loader:URLLoader = new URLLoader(); 
loader.load(request);
Varsayılan olarak, bir istek yöntemi tanımlamazsanız, Flash Player ve Adobe AIR uygulaması HTTP GET yöntemini kullanarak içeriği yükler. Verileri POST yöntemini kullanarak göndermek için, aşağıdaki kodun gösterdiği gibi URLRequestMethod.POST statik sabitini kullanarak request.method özelliğini POST olarak ayarlayın:
var request:URLRequest = new URLRequest("sendfeedback.cfm"); 
request.method = URLRequestMethod.POST;

Çalışma zamanında yüklenen params.txt harici belgesi aşağıdaki verileri içerir:

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

Dosya iki parametre içerir, monthNames ve dayNames . Her parametre, virgülle ayrılmış dizeler halinde ayrıştırılmış bir liste içerir. String.split() yöntemini kullanarak bu listeyi bir diziye ayrıştırabilirsiniz.

Harici veri dosyalarında değişken adı olarak ayrılmış sözcükleri veya dil yapılarını kullanmayın, aksi takdirde bu, kodunuzun okunmasını ve hatalarının ayıklanmasını daha güçleştirir.
Veriler yüklendiğinde complete olayı gönderilir ve aşağıdaki kodun gösterdiği gibi, harici belgenin içindekiler URLLoader data özelliğinde kullanıma hazırdır:
function completeHandler(event) 
{ 
    var loader2 = event.target; 
    air.trace(loader2.data); 
}

Uzak belge ad-değer çiftleri içeriyorsa, yüklenen dosyanın içeriğini aşağıdaki gibi ileterek URLVariables sınıfı aracılığıyla verileri ayrıştırabilirsiniz:

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

Harici dosyadan her ad-değer çifti URLVariables nesnesinde bir özellik olarak oluşturulmuştur. Önceki kod örneğinde yer alan değişkenler nesnesindeki her özellik, bir dize olarak değerlendirilir. Ad-değer çiftinin değeri bir öğeler listesiyse, dizeyi aşağıdaki gibi String.split() yöntemini çağırarak bir diziye dönüştürebilirsiniz:

var dayNameArray:Array = variables.dayNames.split(",");
Harici metin dosyalarından sayısal veriler yüklüyorsanız, int() , uint() veya Number() gibi bir üst düzey işlev kullanarak değerleri sayısal değerlere dönüştürün.

Uzak dosyanın içeriklerini bir dize olarak yükleyip yeni bir URLVariables nesnesi oluşturmak yerine, URLLoader.dataFormat özelliğini URLLoaderDataFormat sınıfında bulunan statik özelliklerden birine ayarlayabilirsiniz. URLLoader.dataFormat özelliği için üç olası değer şunlardır:

  • URLLoaderDataFormat.BINARY URLLoader.data özelliği, bir ByteArray nesnesinde saklanan ikili verileri içerir.

  • URLLoaderDataFormat.TEXT URLLoader.data özelliği, bir String nesnesinde metin içerir.

  • URLLoaderDataFormat.VARIABLES URLLoader.data özelliği, bir URLVariables nesnesinde saklanan URL olarak kodlanmış değişkenleri içerir.

Aşağıdaki kod, URLLoader.dataFormat özelliğinin URLLoaderDataFormat.VARIABLES olarak ayarlanmasının, yüklenen verileri nasıl otomatik olarak bir URLVariables nesnesine ayrıştırmanıza olanak sağladığını gösterir:

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); 
        } 
    } 
}
Not: URLLoader.dataFormat için varsayılan değer URLLoaderDataFormat.TEXT şeklindedir.

Aşağıdaki örneğin gösterdiği gibi, harici bir dosyadan XML yüklemek, URLVariables yüklemekle aynıdır. Bir URLRequest örneği ile bir URLLoader örneği oluşturabilir ve bunları uzak bir XML belgesini indirmek için kullanabilirsiniz. Dosya tamamen indirildiğinde, Event.COMPLETE olayı gönderilir ve harici dosyanın içerikleri, XML yöntemlerini ve özelliklerini kullanarak ayrıştırabileceğiniz bir XML örneğine dönüştürülür.

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()); 
        } 
    } 
}

Harici komut dosyalarıyla iletişim kurma

Harici veri dosyaları yüklemenin yanı sıra, sunucu tarafı komut dosyasına değişkenler gönderip sunucunun yanıtını işlemek için de URLVariables sınıfını kullanabilirsiniz. Bu örneğin, bir oyun programlıyor ve kullanıcının puanını yüksek puanlar listesine eklenip eklenmeyeceğinin hesaplanması için sunucuya göndermek ve hatta kullanıcının oturum açma bilgilerini doğrulama için sunucuya göndermek istiyorsanız, kullanışlı bir özelliktir. Sunucu tarafı komut dosyası kullanıcı adı ve parolayı işleyebilir, veritabanına karşı doğrulayabilir ve kullanıcının girdiği kimlik bilgilerinin geçerli olup olmadığına ilişkin teyit döndürebilir.

Aşağıdaki kod parçası, name adında yeni bir değişken oluşturan variables adında bir URLVariables nesnesi oluşturur. Daha sonra, değişkenlerin gönderileceği sunucu tarafı komut dosyasının URL'sini belirten bir URLRequest nesnesi oluşturulur. Daha sonra, değişkenleri bir HTTP POST isteği olarak göndermek üzere URLRequest nesnesinin method özelliğini ayarlarsınız. URLVariables nesnesini URL isteğine eklemek için, URLRequest nesnesinin data özelliğini önceden oluşturulan URLVariables nesnesine ayarlarsınız. Son olarak, URLLoader örneği oluşturulur ve isteği başlatan URLLoader.load() yöntemi çağrılır.

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); 
}

Aşağıdaki kod, önceki örnekte kullanılan Adobe ColdFusion® greeting.cfm belgesinin içeriklerini barındırır:

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