Üye Giriş

Tavsiye Programlar

Firefox 2

Alexa Tolbar
ASP NİN NESNELERİ PDF Yazdır E-posta
Yazar Hanzala   
Sunday, 26 December 2004

ASP’nin Nesneleri

Masa, nesnedir. Notebook bilgisayarınız da nesnedir! Arkadaşınız da bir nesnedir. Tabiî bunu onun yüzüne karşı söylemeseniz, iyi olur. Her nesnenin özellikleri vardır. Masa serttir. Su, içine konulduğu nesnenin biçimi alır.

ASP tekniğinde de amacımız nesnelerin özelliklerini kullanarak, ya bu özellikleri belirlemek, ya da değiştirmektir. Nesne Yönelimli Programlama (Object Oriented Programming, OOP) kavramını daha önce çok duymuş olmalısınız. Bir önceki bölümde fonksiyonlarla, Sub’larla, değişkenlerle tanıştık. Diyelim ki öğretmensiniz (ah, nerede o günler!) ve ASP programınızda her öğrencinin notunu veritabanına işleyen, veritabanından notları alarak geçeni-kalanı belirleyen veya öğrencilerle ilgili daha yapılması gereken bir çok işi yapan fonksiyonlarınız ve Sub’larınız var; bunların kullandığı bir çok değişkeniniz var: demek ki sizin ASP programınızda “öğrenci” diye bir nesneniz var. Ve siz bu nesneye yönelimli program yapmışsınız!

Her “program nesnesi” iki unsura sahiptir:

Özellik (Property, Attribute): Bir nesnenin özellikleri, onun değişkenleridir. “Öğrenci” nesnesinin “Öğrencinin Adı,” “Notları,” “Adresi” gibi değişkenleri, yani özellikleri vardır.

Metod (Method): Bir nesnenin işlemesi, çalışması için, kısaca kendisinden bekleneni yerine getirebilmesi için çalışma yöntemlerine ihtiyacı vardır. Dolayısıyla bir ASP nesnesinin fonksiyonları, onun metodlarıdır.

Fakat ASP’de nesneler sadece sizin öbekler halinde toplayacağınız fonksiyonlar ve değişkenlerden ibaret değildir. Bir kere, ASP programında kullandığınız Script dilinin getirdiği nesneler vardır. ASP sayfasını Javascript ile yazarsanız başka, VBScript ile yazarsanız başka dil nesnelerine sahip olursunuz; ancak her ikisinde de ortak olan “Scripting” nesneleri vardır. Bunlara birazdan ayrıntılı ele alacağız. Sonra Web Server’ın size hazır sunduğu nesneler vardır. Bunları daha sonraki bölümde göreceğiz. Ve tabiî, Browser’ın bir HTML sayfasının bölümlerini nesne sayarak oluşturduğu nesneler vardır. Bunlara da diğer nesneleri ele alırken sırası geldikçe değineceğiz. (Tabiî bir de ASP programınızı Javascript ile yazarsanız, VBScript’ten farklı olarak kendisi nesne-yönelimli bir dil olan Javascript’in oluşturmanıza imkan vereceği nesneler vardır. Fakat bu nesneler, bu kitapçığın kapsamı dışında kalıyor.)

Nesneler nasıl oluşmuş olursa olsunlar, daima size bir değer verirler:

Nesne.Özellik = Değer

Bir nesnenin bir özelliğinin değeri, bizim için bir değişken değeri gibi önem taşır:

If Nesne.Özellik > Değer Then ...

Nesnelerin özelliklerinin değerlerini değişkenlere atayabiliriz; ancak bunu yaparken Nesne’nin bir metoduna (fonksiyonu) göndermede bulunmamız ve gerekiyorsa bu fonksiyona kullanması için veri göndermeliyiz (bir fonksiyona kullanması için gönderilen değere argüman/argument denir):

Degisken = Nesne.Metod(argüman1, argüman2...)

Daha sonra bu değişkeni istediğimiz yerde kullanırız. Bu kadar teoriden sonra bir örnek nesne oluşturursak, belki işin içinden daha kolay çıkabiliriz.

Nesneler, diğer yararlarının yanı sıra, birbiri ile ilgili Sub’larımızı, fonksiyonlarımızı ve değişkenlerimizi birarada tutmamızı sağlar. Şimdi VBScript ile bir nesne oluşturabiliriz:

<%

Class Ogrenci

            Public Adi, Soyadi, No

            Function AdiSoyadi

            AdiSoyadi = Adi & “ “ & Soyadi

            End Function

End Class

%>

Bir dakika! Nesne (object) adını verdik fakat Class (sınıf) oluşturduk! Bu grubun Object..End Object olması gerekmiyor mu? Belki haklısınız; ama bir “sınıf” ancak VBScript tarafından kullanılmaya başlanırsa Nesne olur. Dolayısıyla biz “sınıf” yazarız; VBScript onu Nesne haline getirir. Peki, nesneyi oluşturduk; şimdi bunu nasıl kullanacağız. Çok kolay; önce bu nesneden yeni bir olgu (instance) oluşturacağız; sonra.. Ama önce bunu nasıl yapacağımızı yazalım:

<%

Dim Ogr1

Set Ogr1 = New Ogrenci

Ogr1.Adi = “Necip”

Ogr1.Soyadi = “Fazıl”

Ogr1.No = “181”

 

Response.Write Ogr1.AdiSoyadi

%>

Her nesne, New (yeni) komutu ile yeni bir değişkene bütün özelliklerini verir. Burada Ogr1 değişkeni, yukarıda oluşturduğumuz Ogrenci nesnesinin bütün özelliklerini kazanmış oluyor. Ogrenci nesnesinin “.Adi”, “.Soyadi” ve “.No” özellikleri olması gerekir; nitekim Ogr1’e bu özelliklerini burada veriyoruz. Ogrenci nesnesinin bir de metodu (fonksiyonu) var; Ogr1 bunu da kazanabilir mi? Tabiî; hem kazanır, hem de bunu ziyaretçinin Browser penceresine yazdırabilir.

Nesne kavramını kavramak zordur. Fakat yukarıdaki örnekte görüldüğü gibi, ASP sayfalarınızda nesne oluşturarak çalışmaya alıştığınız zaman bunun sağladığı kolaylıktan kolayca vazgeçmeyeceksiniz.

///////////////KUTU////////////////////

Hata (Err) Nesnesi

Hangi dille olursa olsun program yazarken hata yapmak kaçınılmaz bir kuraldır. Dolayısıyla kullandığınız programlama dili hatalarınızı kolayca yakalamanıza imkan vermelidir.

ASP programlarınızda yazım yanlışlığı, olmayan değişkene gönderme gibi Script hatası olmaması gerekir. Bu tür hatalar, program Web’e gönderilmeden mutlaka ayıklanmalıdır. Fakat programcı olarak öngöremeyeceğiniz, ve çoğu Web ziyaretçisinden veya ziyaretçinin bilgisayarından kaynaklanan hata durumları olabilir. VBScript, şu standart komutla beklenmedik hata durumlarında programın yoluna devam etmesini sağlayabilir:

<% On Error Resume Next %>

 Bu komutla VBScript’e, hata halinde bir sonraki satırdan yoluna devam edecektir. Fakat oluşan hata, programın daha sonra vermesi beklenen sonucu vermesini önleyebilir. VBScript, Err (Hata) Nesnesi’nin bir çok özelliğinden özellikle hata sayısı (Number), tanımı (Description) ve kaynak (Source) özellikleri ile size hatanın ne olduğunu ve nereden kaynaklandığını söyleyebilir. Bu özellikleri kullanarak, programlarınızda, en azından geliştirme aşamasında, örneğin,

If Err:Number = xx Then

şeklinde bir ifade ile hatanın türüne göre programın kazasız yürümesini sağlayabilirsiniz. Burada xx yerine 108 ayrı hata numarası yapabilirsiniz. Hata numaraları, Microsoft’un VBScript sitesinden edinilebilir.

////////////////////////////////KUTU BİTTİ//////////////

Nesneler hakkında aşağı yukarı bir fikir edindiğimize göre, şimdi kullanılmaya hazır Nesne’lerden başlayarak, VBScript kullanırken, ASP sayfalarımızda yararlanabileceğimiz Nesne’leri ele alabiliriz.

Dosya Sistemi Nesnesi

Dosya Sistemi Nesnesi (FileSystemObject), ASP programının, Web Sunucusunun sabit disk sisteminde, sürücüleri, klasörleri ve dosyaları yönetmekte kullanacağımız temel araçtır. Burada, ne denli güçlü bir araçtan söz ettiğimizi hemen görebilmek için şu kodu yazalım ve dosya_yaz.asp adıyla kaydedelim:

<% Option Explicit %>

<HTML>

<HEAD>

<TITLE>ASP ILE DOSYA YAZMA</TITLE>

<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<META http-equiv="Content-Type" content="text/html; charset=windows-1254">

</HEAD>

<BODY>

<%

Dim YaziFSO, yaz

Set YaziFSO = CreateObject("Scripting.FileSystemObject")

Set yaz = YaziFSO.CreateTextFile("c:\yazi_deneme.txt",True)

yaz.WriteLine("Bu bir denemedir.")

yaz.Close

%>

<H2><CENTER>Bu Web sayfası sabit diske yazı yazdırır!!

<BR>Şimdi C: sürücüsünde yazi_deneme.txt adlı bir dosya olması gerekir!

<BR>Lütfen bakar mısınız?</H2></CENTER>

</BODY>

</HTML>

Kodumuzun Dim satırında iki değişken belirlediğimizi görüyorsunuz. Fakat bu iki değişkeni sistem nesnesi olan Scripting’in yeni bir olgusu olarak kullanacağımız için daha önce standart değişkenlere değer atadığımız gibi değil, fakat Set komutundan yararlanıyoruz, ve YaziFSO değişkeninde bir “Scripting.FileSystemObject” nesnesi oluşturulmasını sağlıyoruz. (ASP uzmanları arasında gelenek, nesne değeri tutan değişkenlere, ilgili nesnenin baş harflerini eklemektir. Böylece bir değişkenin adına bakarak, işlevini anlamak mümkün olur.)

“yaz” değişkeni YaziFSO’da yeni bir olgusunu oluşturduğumuz FileSystemObject’in CreateTextFile (Düzyazı dosyası oluştur) metodunu kullanıyoruz; bu metod oluşturulacak dosyanın adını ve eğer bu dosya varsa üzerine yazılmasına izin veren True (doğru) veya buna izin vermeyen False (yanlış) kelimesini argüman olarak alır. “yaz” değişkeni şimdi kendisi bir metod kullanabilecek şekilde, FileSystemObject’in bir örneğidir; nitekim WriteLine metodu ile biraz önce oluşturulan dosyaya, argüman olarak verdiğimiz metni yazdırmaktadır. Bu kodu çalıştırdıktan sonra, sabit diskinize bakarsanız, düzyazı dosyasını göreceksiniz:

<asp0009.tif>

Bugüne kadar Web tekniği olarak Browser’da bir sayfayı görüntüleyebileceğimizi sanıyor idiysek, sistem nesneleri kullanarak çok daha farklı şeyler yapabileceğimizi görmüş olduk. Şimdi FileSystemObject’i daha yakından tanıyabiliriz.

Bu nesne bize sabit diske erişme ve onun kaynaklarını kullanma imkanı verir. Bütün nesneler gibi kullanılabilmesi için önce bir değişkenin bünyesinde oluşturulması gerekir:

<%

Dim DosyaSistemi

Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”)

%>

Dosya Sistemi Nesnesi’nin 20’den fazla metodu vardır; fakat bunlardan önemlileri şöyle sıralanabilir:

CopyFile (dosya kopyala), MoveFile (Dosya taşı), CopyFolder (klasör kopyala), MoveFolder (klasör taşı), Create Folder (klasör oluştur), DeleteFile (dosya sil), DeleteFolder (klasör sil).

Şimdi bunlardan birinin nasıl kullanılabileceğine bir örnek verelim:

<%

Dim DosyaSistemi

Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”)

DosyaSistemi.DeleteFile “c:\belgelerim\test.*”

%>

Bu program ile “Belgelerim” klasöründeki “test” isimli bütün dosyaları silmiş olursunuz. (Bu programı çalıştırmadan önce bir kaç kez düşünmeniz, sanırım iyi olur; çünkü ASP yoluyla sildiğiniz dosyalar, Geri Dönüşüm Kutusu’na gitmez!) Daha az zararlı bir diğer örnek ise şöyle olabilir:

<%

Dim DosyaSistemi

Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”)

DosyaSistemi.CopyFile “c:\belgelerim\*.*”, “c:\yedekler\”

%>

Bu program “Belgelerim” dizinindeki bütün dosyaları “Yedekler” dizinine kopyalar.

FileSystemObject’in sadece bir özelliği (Property) vardır: Drives (sürücüler). Fakat bu özellik, bir değil bir çok elemandan oluşan bir dizi-değişken gibi Kolleksiyon (Collection) sayılır. Nede? Çünkü bir Web Server’da birden çok sürücü bulunur. Her sürücü, bu kolleksiyonun üyesidir (FileSystem.Drives) ve her birinin sürücü harfi (.DriveLetter), disk adı (.VolumeName), byte olarak boş alanı (.FreeSpace) özellikleri vardır. suruculer.asp adıyla kaydedeceğiniz şu program, denediğiniz sistemin disk-disket-CD-ROM durumunu size listeleyecektir.

<% Option Explicit %>

<HTML>

<HEAD>

<TITLE>ASP ILE SÜRÜCÜ KOLLEKSİYONU</TITLE>

<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<META http-equiv="Content-Type" content="text/html; charset=windows-1254">

</HEAD>

<BODY>

<%

Dim DosyaSistemi, Surucu, Suruculer

Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")

Set Suruculer = DosyaSistemi.Drives

For Each Surucu In Suruculer

%>

<b>Sürücü:</b> <%=Surucu.DriveLetter%><br>

<% If Surucu.IsReady = True Then%>

<b>Disk Adı:</b> <%=Surucu.VolumeName%><br>

<b>Boş alan:</b> <%=Surucu.FreeSpace%><br>

<% Else %>

<i>Sürücü hazır değil!</i><br>

<% End If

Next %>

</BODY>

</HTML>

Burada özelliklerini ve metodlarını DosyaSistemi adlı değişkene atadığımız Dosya suistemi Nesnesi’nin sürücüler kolleksiyonunun dizi-değişken gibi olduğunu söylemiştik. For..Next akış kontrolü ile bu kolleksiyonun bütün üyelerinin sırayla sürücü harfi, ve hazırsa disk adı ve boş alanı bilgilerini alıyoruz. Drives kolleksiyonunun diğer özellikleri arasında toplam yüzey genişliği (TotalSize), sürücü türü (DriveType; 0=bilinmiyor; 1=çıkartılabilir; 2=sabit; 3=ağ; 4=CD-ROM; 5= RAM-Drive), ve dosya sistemi (FileSystem; FAT, NTFS, CDFS), kök dizin (RootFolder) vardır. Bu program bir PWS’da çalıştığında, şu sonucu alıyoruz:

<asp0010.tif>

VBScript açısından, her sürücüde klasörler (Folders) ve onların içinde alt-klasör (Subfolders) ve dosya (Files) kolleksiyonları bulunur. (Her klasörün içinde içinde bir alt-klasör nesnesi bulunduğu için ASP ile sonsuza kadar bütün klasörlere gönderme yapabilirsiniz. Klasör nesnesinin bazı özellikleri şunlardır:

Adı (Name), oluşturulma (DateCreated), erişim (DateLastAccessed), değiştirme (DateLastModified) tarihleri, içindeki dosyalar ve alt-klasörlerdeki dosyalarla birlikte boyutu (Size), bulunduğu sürücü (Drive), içinde bulunduğu klasör (ParentFolder), alt-klasörler (SubFolders), kök dizin olup olmadığı (IsRoot).

Klasör nesnesinin kopyala (Copy), sil (Delete) ve Taşı (Move) metodları vardır.

Dosya (File) nesnesinin de ad, oluşturma, erişim, değiştirme, boyut, sürücü ve içinde bulunduğu sürücü özellikleri, ve kopyala, sil, taşı metodları vardır.

PWS’ınızın bulunduğu sistemde, söz gelisi C: sürücüsünün kök dizinindeki bütün dosyaların listesini size veren bir kod şöyle yazılabilir (dosyalar.asp):

<% Option Explicit %>

<HTML>

<HEAD>

<TITLE>ASP ILE KLASOR - DOSYA KOLLEKSİYONU</TITLE>

<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<META http-equiv="Content-Type" content="text/html; charset=windows-1254">

</HEAD>

<BODY>

<%

Dim DosyaSistemi, Surucu, Dosya, KokDizin, KokDosyalar, DosyaNesnesi

Dim SurucuHarfi

SurucuHarfi = "C:"

Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")

Set Surucu = DosyaSistemi.GetDrive(SurucuHarfi)

Set KokDizin = Surucu.RootFolder

Set KokDosyalar = KokDizin.Files

For Each DosyaNesnesi In KokDosyalar

%>

<%=DosyaNesnesi.Name%><br>

<% Next %>

</BODY>

</HTML>

Burada SurucuHarfi değişkenin değerini değistirerek, arzu ettiğiniz disk/disket veya CD-ROMa ulaşabilirsiniz. GetDrive metodu dikkatinizi çekmiş olmalı; bu metodla, VBScript, fiilen disk/disket sistemine erişir.

Daha sonra yapacağımız ASP sayfalarında dosya sistemi nesnesinden ve disk sürücüleri kolleksiyonundan yararlanacağız.

Metin (TextStream) Nesnesi

Dosya sistemi nesnesi bize disk sistemine, klasörlere ve dosyalara erişme imkanı verir ama yeni dosyaları oluşturmak veya mevcutlara ek yapmak için yeterli özellik ve metoddan yoksundur. Bunu TextSream nesnesi sağlar.

Bilgisayar işletim sistemlerinin anası, Unix’e aşina iseniz, klavyeden sabit diske kadar bir bilgisayara girdi akımı bulunduğunu, bunlardan birinin de metinler olduğunu hatırlayacaksınız (Aşina değilseniz, şimdi oldunuz!). Bir işletim sistemi, metin dosyalarını okurken, yazarken bir metin akışı olur; TextStream nesnesinin adı da bunu anlatıyor: Metin Akımı. Web Server ve dolayısıyla ASP açısından sabit diske bir metin yazarken, veya sabit diskten bir metin okurken, bir metin akışı nesnesi oluşur. Bu nesnenin özellikleri ve metodlarını kullanarak, örneğin ziyaretçilerin sitemize bırakacakları form bilgilerini Web Server’ın sabit diskine yazdırabiliriz. Veya mevcut metinleri okuyabilir ve bunların içeriğini ziyaretçimize göndereceğimiz HTML sayfanın etiketlerinin içeriği olarak kullanabiliriz. Metin dosyası okumak ve yazmak disk sistemini ilgilendiren bir eylem olduğu için yine Scripting nesnelerinden FileSystemObject nesnesinden yararlanacağız; fakat bu kez değişik metodlar kullanacağız.

Metin Dosyası Oluşturma (CreateTextFile)

Aslında biraz önce, ASP nesnelerinin neler yapabileceğine örnek olarak yazıp dosya_yaz.asp adıyla kaydettiğimiz program, bir metin dosyasını yazdırma işlemiydi. Oradaki kodlara yeniden göz atarsanız, CreateTextFile (metin dosyası oluştur) metodunu yardıma çağırıyor ve bu metoda argüman olarak yeni metin dosyasının yolunu ve adını veriyorduk. Bu metod TextStream nesnesinindir; ve otomatik olarak bu nesnenin diğer metodlarını kullanmamızı sağlar. kullandığımız metodlar ise WriteLine (satır yaz: bir String’i sonuna yeni satır karakteri koyarak dosyaya yazar) ve Close (kapat: açılan metin dosyasını kapatır).

TextStream’in burada kullandığımız ikisinin dışında iki metodu daha vardır:

Write (yaz): Bir String’i dosyaya yazdırır; satır sonuna yeni batır karakteri (Return kodu) koymaz.

WriteBlankLines (boş satır yaz): Bir metin dosyasına argüman olarak vereceğiniz sayıda boş satır yazdırır.

Varolan Metin Dosyasına Ek Yapma (OpenTextFile)

Metin yazdırma işlerinde sık sık uygulayacağımız bir senaryo, mevcut bir metin dosyasına ek yapmak olacaktır. Örneğin bütün ziyaretçilerimizin sitemizdeki konuk defterine yazdıklarını, bir metin dosyasında toplamak isteyebiliriz.

Bunu OpenTextFile metodu ile yapacağız. Bu metod, tahmin edeceğiniz gibi, açılacak dosyanın yolunu ve adını isteyecektir. Örneğin, dosya_yaz.asp’nin ilgili satırı şöyle olacak:

Set yaz = YaziFSO.OpenTextFile("c:\yazi_deneme.txt",8,0)

Burada dosya yolunu ve adını veren birinci argümana ek olarak iki yeni argüman görüyorsunuz: “8,0” şeklinde. Bunlardan birinicisi girdi/çıktı durumu (I/O Mode), ikincisi ise biçim (Format) ile ilgilidir. I/O Mode parametreleri şunlardır:

1: okumak için aç

8: eklemek için aç

Açılacak dosyanın biçimini belirttiğimiz son argüman ise şu değerlerden birini alabilir:

0: ASCII dosyası olarak aç

-1: Unicode dosyası olarak aç (Örneğin içinde Türkçe karakterler varsa)

-2: Sistemin varsayılan dosya türü olarak aç

Buna göre, bir dosyayı salt okumak için açmak amacıyla “1,0” argümanlarını kullanmamız gerekir. Diyelim ki bir dosyayı açtık. İçindekileri nasıl okuyabiliriz? Bir döngüyle. İşte örneği:

<% Option Explicit %>

<HTML>

<HEAD>

<TITLE>ASP ILE DOSYADAN METİN OKUMA</TITLE>

<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<META http-equiv="Content-Type" content="text/html; charset=windows-1254">

</HEAD>

<BODY>

<%

Dim DosyaSistemi, MetinDosyasi, Satir

Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")

Set MetinDosyasi = DosyaSistemi.OpenTextFile("c:\yazi_deneme.txt",1, 0)

Do

Satir = MetinDosyasi.ReadLine

%>

<%=Satir%>

<%

Loop Until MetinDosyasi.AtEndOfStream

MetinDosyasi.Close

%>

</BODY>

</HTML>

Burada kullandığımız metod dikkatinizi çekmiş olmalı: ReadLine. Bu, açılan metin dosyasından bir satır okutmamızı sağlar. İkinci ve son satırları okutmamızı ise Do..Loop kontrolü sağlıyor. Bu döngü ne kadar sürüyor? MetinDosyası nesnesi, AtEndOfStream (akımın sonunda) oluncaya kadar. Bu, dosyanın sonuna geldiğimiz anda ortaya çıkan bir durum; bu durumla karşılaştığı anda Do..Loop, yaptığı işi durdurup, bir sonraki komuta geçecektir. Burada kullandığımız ReadLine metoduna ek olarak yararlanabileceğimiz diğer metodlar ise şunlardır:

Read (oku): Bir sayı örgümanı ile çalışır ve verdiğiniz sayı kadar karakter okur.

ReadLine (satır oku): Bir satır okur ve String olarak verir.

ReadAll (tümünü oku): Bütün satırları okur ve tek String olarak verir.

Skip (atla): Bir sayı argümanı ile çalışır ve verdiğiniz sayı kadar karakteri atlar.

SkipLine (satır atla): Bir sonraki satıra atlar.

Bu metodlarla sağladığımız okuma işinin kontrolü amacıyla şu özellikleri de kullanabiliriz:

AtEndOfStream (akımın sonunda): Okutulan dosyanın sonuna gelinmesi halinde True (doğru) olur.

AtEndOfLine (satırın sonunda): Okutulan satırın sonuna gelinmesi halinde True (doğru) olur.

Sunucu (Server) Nesneleri

Buraya kadar ele aldığımız nesneler bir anlamda bizim sadece tek tek sayfalarda yararlanacağımız araçları sağlıyor. Oysa ASP’yi diğer CGI teknolojilerinden ayıran başlıca özelliklerden biri tek tek Web sayfalarını sanki bir bilgisayar programının çeşitli pencereleri, diyalog kutuları, mesaj kutuları, girdi kutuları gibi, birarada bir “uygulama programı” olarak bağlayabilmesidir. Başka bir deyişle bize, ziyaretçinin sitemize bağlandığı ve ana sayfamızı açtığı andan itibaren sitemizin bir program bütünlüğünde çalışmasını sağlayacak araçlar gerekir. Bunu ancak Web Server’ın yardımıyla yapabiliriz.

ASP sayfalarımızda kullanacağımız ikinci grup nesne, Sunucu Nesneleri’dir. Bu grupta tabiî önce Sunucu’nun kendisi yer alır; sonra ziyaretçi ile kurduğumuz ilişki gelir. Ziyaretçi ile ilişkimizi iki yönlü trafiğe benzetebilirsiniz: ondan bize gelen talepler, bizim ona karşılıklarımız.

Ziyaretçiden bize gelen trafiğe neden “Talep” diyoruz? Ziyaretçi, Browser’ının URL hanesine yazdığı her adresle, veya formlardaki bir düğmeyi veya sayfalarımızdaki herhangi bir köprüyü tıklamakla, Server’a “Bana şunu göndersene!” demiş olur. Bu taleptir. Ziyaretçi taleplerinin tümü Talep Nesnesi (Request Object) olarak bir arada ele alınabilir. Server’ın bu taleplere verdiği karşılıklar, yani ziyaretçinin Browser’ına gönderdiği sayfalar, resimler, sesler, videolar ise karşılıktır ve ASP açısından Karşılık Nesnesi’ni (Response Object) oluşturur.

Bu bölümde bu nesneleri daha yakından tanıyacağız.

Server Nesnesi

Web Server, ASP için bir nesnedir, ASP’nin bir çok işini bu nesnenin özellikleri ve metodları halleder. Server nesnesinin bir özelliği (ScriptTimeout) ve dört metodu (CreateObject, HTMLEncode, URLEncode, MapPath) vardır. Web Server çalıştığı bilgisayarın sizin siteniz adına yönetiminden sorumludur; dolayısıyla bu kadar az özellik ve metodu var diye bu nesneden çok yararlanmayacağımızı sanmayın. ActiveX ve COM bileşenlerini çalıştırmak Server’ın görevidir.

ScriptTimeout Özelliği: Diyelim ki bir ASP Script’i ya bizim, ya ziyaretçinin, ya da Server’ın bir hatası üzünden sonsuz döngüye girdi! Döngünün durması için gerekli şart asla yerine gelmiyor ve Script bir türlü yapacağı işi yapıp, sonlandırmıyor. Bu durumlarda ziyaretçinin ve tabiî Server’ın sonsuza kadar beklemesi mümkün değil! Programın bir şekilde durdurulması gerekir. Bunu hemen hemen bütün Web server programlarının Script Timeout (Script süre sınırı) diyalog kutusuna bir değer girilerek yapılır. Öreğin MS-Internet Information Server için varsayılan Script Timeout süresi 90 saniyedir. Yani ISS, herhangi bir Script’in çalışıp-durmasını 90 saniye bekler; bu sürenin sonunda Script’in çalışması tamamlanmazsa ziyaretçiye arzu ettiği sayfanın veya unsurun bulunamadığını bildirir. Bu süreyi (Server’ın varsayılan değerinin altında) kısaltmak değilse bile uzatmak elimizdedir. Bunu ScriptTimeout özelliğini kullanarak yaparız. ASP sayfasının herhangi bir yerine örneğin şu kodu koymak yeter:

<% Server.ScriptTimeout = 100 %>

Bu örneğe göre Server’ın varsayılan Script Timeout süresi 90 saniye ise 100 saniyeye çıkmış olur.

Böyle bir şeyi neden yapmak isteyebiliriz? Script’iniz çok karmaşık veya başka bir Server’daki veritabanından veri çekiyor, olabilir. Gerçi bu anlamda 90 saniye bilgisayar milleti için bir asır anlamına gelir, ama yine de durdurulmasaydı işini başarıyla tamamlayacak bir Script, bu sürenin kısalığı yüzünden Server tarafından durdurulabilir. ASP sayfalarınız çok karmaşıksa ve sürekli Timeout hatası veriyorsa, hata aramadan önce bu süreyi uzatabilirsiniz.

CreateObject Metodu: İlk ASP kodunu yazdığımız andan beri bu metodu kullandığımızı görüyorsunuz. CreateObject (nesne oluştur) olmasa idi, dört mevsim birbirini izleyebilir, Dünya Güneş’in etrafında dönebilir miydi? Hiç sanmam. Fakat lütfen o CreateObject ile bu CreateObject’i birbirine karıştırmayın. Yukarıda kullandıklarımız Scripting nesnesinin bir metodu idi; bu Server nesnesine aittir. Diyelim ki sayfanızda reklam amaçlı banner grafiklerini belirli zaman aralığı ile veya ziyaretçiye gönderdiğiniz Cookie (çerez) bilgilerine göre değiştirmek istiyorsunuz. Bunun için diyelim ki MS-Web Server Programının AdRotator bileşininden yararlanacaksınız; şöyle bir kod işinizi görebilir:

<% Set Reklam = Server.CreateObject (“MSWS.AdRotator”)%>

<%= Reklam.GetAdvertisement(“/reklamlar/buyukbanka.txt”)%>

Burada GetAdvertisement, Server’ın AdRotator bileşininin bir metodudur. Server’ın CreateObject metodundan, veritabanına ulaşırken de yararlanacağız.

MapPath (Yolu belirle) Metodu: Web Server açısından “kök dizin” (root directory) Server’ın bulunduğu bilgisayarın sabit diskinde, herhangi bir klasör olabilir. Örneğin IIS için bu varsayılan değer olarak “C:\inetbup\wwwroot” klasörüdür. Özellikle ASP ile “program niteliğinde siteler” yapmaya başladığımızda, sitenin ilgili bütün dosyalarının bulunduğu bir dizin için yol belirlemek isteyebiliriz. Bunu Server nesnesinin MapPath (Yolu belirle) metodu ile yapabiliriz:

WebDizini = Server.MapPath(“/benim_site”)

Bu komutla WebDizini değişkenin değeri muhtemelen şöyle olacaktır:

“C:\inetbup\wwwroot\benim_site\”

Fakat bu metodun sadece böyle duragan biçimde kullanılması gerekmez; bazen sayfalarımızda ziyaretçi ile etkileşmenin sonucu olarak varsayılan Web dizinimizi değiştirmek isteyebiliriz. Sözgelimi biri Türkçe, diğeri İngilizce iki sitemiz varsa, ve ana sayfamızda ziyaretçi Türkçe’yi seçtiyse, o noktadan itibaren Web uygulamamız için Web kök-dizini, “/turkish/” olacak ve mesela resimlerimiz için verdiğimiz “/resimler/” dizini kök dizinde değil, “/turkish/resimler/” klasöründe aranacaktır. Web yolunu dinamik olarak, yani ziyaretçinin tercihine bağlı şekilde değiştirebilmek için, önce ziyaretçiden gelecek bilgileri nasıl kullanacağımıza, yani Request (talep) nesnesine değinmemiz gerekir.

HTMLEncode, URLEncode: İçinde HTML açısından kod parçası veya özel işaret sayılan karakterler bulunan metinleri sayfamıza içerik olarak göndereceğimiz zaman Server’ın işaretleri aynen metin gibi göndermesini sağlamak için, örneğin:

Server.HTMLEncode(“Değisken1 < Değisken2”)

yazarsak, ASP bu metni HTML kodu olarak yorumlamaz, metin olarak algılar.

Internet’te bazen özellikle sayfa adresleri belirtilirken bazı değerlerin “URL Kodu“ dediğimiz şekilde kodlanmış olarak gönderilmesi gerekir. Bu kodlama türünde boşlukların yerine + işareti konmuş olması şarttır. Bu tür bilgiler göndereceğimiz zaman:

Server.URLEncode(“kelime 1 kelime2 kelimeme2”)

şeklindeki bir kod Bunu hemen şu şekle sokacaktır:

kelime1+kelime2+kelime3

Talep (Request) Nesnesi

Web Server çok akıllı bir programdır; bir Web ziyaretçisi herhangi bir talepte bulunduğu, yani bir sayfanın gönderilmesini istediği anda, bu talebi, bir nesne halinde ele alır; kolleksiyonlar oluşturur. Bu kolleksiyonlar, HTTP protokolü ile iletişimin sonucu olarak ziyaretçinin Browser’ından ve Internet’e giriş noktası olan ISS’in bilgisayarından başlayan ve Web Server’dan derlenen bir dizi bilgidir. Bir anlamda, Request nesnesi, Web programımızın Girdi (Input) bölümünü oluşturur.

Request nesnesi kendi içinde dört ana nesne barındırır:

QueryString ve Form

Web ziyaretçisinin bilgisayarından kalkıp Server’a gelen herşey, QueryString kolleksiyonunu oluşturur. Bu ziyaretçinin Browser’ın URL adresi hanesine yazdığı bir basit HTML sayfası yolu ve adı olabilir; bir Form’un Gönder düğmesini tıkladığında gelen bilgiler olabilir. Bu bilgilerin şu özelliklerini kullanabiliriz:

Content_Length: Bir Form’dan gelen bilgilerin tümümün byte olarak boyutudur.

Remote_Host: Ziyaretçinin IP adresini verir; ancak Internet’e çevirmeli ağ ile bağlanan ziyaretçilerimiz her seferinde farklı bir IP bildirebilirler. Bu yüzden bu bilgiyi ziyaretçinin kimliği sayamayız.

Request_Method: Form’da kullandığımız GET veya POST metodunu bildirir. İki yöntemle gelen bilgi farklıdır. Form’un oluşturduğu bilgileri GET yöntemi ile alırsak bu, çevre değişkenlerinden QUERY_STRING değişkeninin içine yazılır. Başka bir ifade ile Form’daki bütün değişkenlerin adları ve bu değişkenin içerdiği değer yumak yapılır (bu yumağın niteliğine ve nasıl çözeceğimize geleceğiz!) ve Server’da QUERY_STRING değişkeninin değeri olarak yazılır. Form’un bilgilerini POST yoluyla alıyorsak bunlar Request nesnesinin Form kolleksiyonunun içinde Form’un değişken adları ve ziyaretçinin bu değişkenler için sağladığı değerler olarak ayrı ayrı yazılır. GET ile sınırlı, POST ile sınırsız bilgi alabiliriz.

Script_Name: O anda çalıştırılmakta olan ASP sayfasının adını verir.

ServerVariables (Server Değişkenleri)

Request nesnesinin bir diğer kolleksiyonu, bizim kendi Web Server’ımızın o anda çalışmakta olan ASP sayfası için oluşturduğu ortamın değişkenleridir. Bunların arasında ziyaretçinin Browser’ına ilişkin bilgiler de vardır. Önvc şU kısa ASP sayfasını çalıştırarak kendi Server’ımızın şu andaki değişkenlerini görelim; sonra bunları ayrıntılı ele alalım (SerDeg.asp):

<HTML>

<HEAD>

<TITLE>HTTP ServerDegişkenleri Kolleksiyonu</TITLE>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

</HEAD>

<BODY BGCOLOR=white>

<CENTER>

<H2>HTTP Server Değişkenleri Kolleksiyonu</H2>

</CENTER>

<TABLE BORDER=1>

<TR><TD><B>Değişkenin adı</B></TD> <TD><B>Değeri</B></TD></TR>

<% For Each key in Request.ServerVariables %>

            <TR>

            <TD><% = key %></TD>

            <TD>

            <%If Request.ServerVariables(key) = "" Then

                  Response.Write " "

            Else       

                  Response.Write Request.ServerVariables(key)

            End If

            Response.Write "</TD>"%>

            </TR>

<% Next %>

</TABLE>

<p>

Sizin Host'unuzun adı:<B> <%=Request.ServerVariables("HTTP_HOST")%></B>

</BODY>

</HTML>

Bu sayfayı çalıştırdığımız zaman görüntülenecek tabloda, Bir HTTP Server’ın SerDeg.asp sayfasını çalıştırdığı anda oluşturduğu ortama şekil veren bütün değişkenleri göreceksiniz. Bu değişkenleri programlama yoluyla değiştiremeyiz; sadece okuyup, yararlanabiliriz. HTTP Server Değişkenleri Kolleksiyonunun elemanları şöyle sıralanır:

Değişkenin adı                            Değeri

ALL_HTTP                               HTTP Header içinde yer alan bütün değişkenler ve değerleri. Header adlarının önünde “HTTP_” öneki vardır.

ALL_RAW                               HTTP Header içinde yer alan bütün değişkenler ve değerleri. Header adları ve değerleri istemci Browser’ın verdiği şekilde gösterilir.

APPL_MD_PATH                    Web Server’ın ISAPI.DLL dosyası için varsaydığı kök dizin

APPL_PHYSICAL_PATH       Web Server’ın varsaydığı kök dizinin gerçek yolu

AUTH_PASSWORD                Kullanıcı Web Server’a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa, kullanılan parola

AUTH_TYPE                            Kullanıcı Web Server’a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa, kullanılan yetkilendirme yöntemi

AUTH_USER                           Kullanıcı Web Server’a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa, kullanıcı adı

CERT_COOKIE                       Kullanıcı siteye bağlanmak için yetkilendirme sertifikası kullanıyorsa kendisine verilen kimlik (ID)

CERT_FLAGS                          Sertifikanın varlığını gösteren bit değeri

CERT_ISSUER                         Sertifika varsa veren kurum

CERT_KEYSIZE                      Secure Socket Layers kullanılıyorsa, bağlantı için anahtar değeri

CERT_SECRETKEYSIZE        Özel anahtar değeri

CERT_SERIALNUMBER        Sertifika seri no.

CERT_SERVER_ISSUER        Sertifikayı veren merci

CERT_SERVER_SUBJECT     Server Sertifikasının “konu” alanı değeri

CERT_SUBJECT                      İstemci Sertifikasının konu alanı değeri

CONTENT_LENGTH              İstemcinin gönderdiği bilgi yumağının boyutu

CONTENT_TYPE                    Ziyaretçiden gelen bilgilerin GET veya POST metoduna göre edindiği tür

GATEWAY_INTERFACE       Web Server’ın ziyaretçi ile etkileşim arayüzünün adı ve sürümü. Genellikle: CGI/1.1

HTTPS                                      Ziyaretçi ile bağlantı güvenli ise ON, değilse OFF

HTTPS_KEYSIZE                    Secure Sockets Layer için bağlantı anahtar sayısı

HTTPS_SECRETKEYSIZE      Özel Server sertifikasının gizli anahtar sayısı

HTTPS_SERVER_ISSUER      Özel Server sertifikasının veren merci

HTTPS_SERVER_SUBJECT   Özel Server sertifikasının konusu

INSTANCE_ID                        Web Server’ın aynı anda kaç kere çalışmakta olduğu

INSTANCE_META_PATH     Şu anda çalışmakta olan Web Server’ın Meta yolu

LOCAL_ADDR                        İstemcinin IP numarası

LOGON_USER                        İstemci Windows NT sisteminde ise oturum açma adı

PATH_INFO                            Çalışmakta olan ASP’nin göreli yolu ve adı

PATH_TRANSLATED             Çalışmakta olan ASP’nin gerçek yolu ve adı

QUERY_STRING                    İstemcinin gönderdiği bilgi kümesi

REMOTE_ADDR                     İstemcinin Host’unun (ISS’inin) IP’si

REMOTE_HOST                      İstemcinin Host’unun (ISS’inin) adı

REMOTE_USER                      İstemcinin gerçek adı

REQUEST_METHOD              İstemciden bilgi isteme yöntemi (GET veya POST)

SCRIPT_NAME                       Çalışmakta olan ASP’nin adı

SERVER_NAME                      Sunucu’nun adı

SERVER_PORT                       Sunucuya bağlantının geldiği TCP kapı numarası

SERVER_PORT_SECURE      TCP kapısı güvenli ise 1, değilse 0

SERVER_PROTOCOL            Server’ın çalıştırdığı HTTP’nin sürümü

SERVER_SOFTWARE            Server programının adı ve sürümü

URL                                          Şu anda geçerli URL

Cookie (Çerez)

Daha önce ne kadar çok olursa olsun tek-tek Web sayfalarından oluşan siteler yaptıysanız bile, Cookie (Çerez) ile ilginiz olmamış olabilir. Ya da sadece Internet ziyaretçisi olarak başkalarının size gönderdiiği Cookie’lere sinirlenmekle yetinmiş olabilirsiniz. Fakat şimdi ASP ile Web Programı oluşturmaya hazırlanan kişi olarak Cookie’lerle daha yakından ilgilenmeniz gerekiyor. Çünkü artık siz de başkalarına çerez göndereceksiniz!

Tabiî bunun için önce “Cookie neden gereklidir?” sorusunu yanıtlamak gerekir. HTTP ile yapılan iletişim, belirgin olmayan durum bağlantısına dayanır: yani ne istemci sunucunun, ne de sunucu istemcinin o anda hatta (on-line) olduğunu bilmek zorunda değildir; birbirlerinden istedikleri ve gönderdikleri şeyleri karşı tarafından almaya hazır olduğunu bilmeden gönderirler. Oysa sözgelimi elektronik alışveriş gibi ziyaretçinin bir yerlere birşeyler kaydettiği, geçici değişkenler oluşturduğu durumlarda sitemizde kimin ne yaptığıını bilmek zorundayız. Ziyeretçinin bir sayfada yaptığı tercihler diğer sayfalarda ona sunacağımız içeriği etkileyebilir, belirleyebilir. Oysa aynı ziyaretçi bir sayfadan diğerine geçerken Server ile ilişkisini kaybedebilir. Bunun için ziyaretçinin Internet’ten kopması gerekmez; sadece TCP/IP protokolü gereği bizimle bağlantısı kesilebilir. Bunu ziyaretçi farketmeyebilir; ama Server etmek zorundadır. Heryeni ilişkiye yeni bir “application” (uygulama programı) başlatamayız; ziyaretçinin bir önceki sayfada yaptığı tercihlerin devam etmesi gerekir. Bu devamlılığı ziyaretçiyi işaretleyerek yaparız; bu işareti de Cookie sağlar.

ASP tekniğiyle tasarladığımız sitede, ziyaretçilerimize Cookie göndermek zorunluktur diyebiliriz. ASP açısından Cookie’ler bir nesne oluştururlar. Aslında, Cookie’ler ASP için iki ayrı grup Cookie nesnesi oluştururlar: verilenler, ve hakkında bilgi alınan varolan Cookie’ler. Birinci grup Request (talep) nesneleri, ikinci grup ise Response (karşılık) neslereni içinde ele alınabilir. Cookie konusunun  devamını Response nesnelerine değindiğimiz yere bırakalım.

Sertifika Nesnesi

Sertifika, HTTP bağlantısında “Ben filancayım!” diyen istemcinin, gerçekten filanca olup olmadığını gösterir. Bir yazılımdan ibaret olan sertifikaları yetkili bir kurum veya şirket verir; bir seri numarası olur. Şifreleme teknikleri gelişmiş olduğu için taklit edilmesi zordur. Sertifika uygulaması için Web Server’ın Secure Socket Layers denen güvenli HTTP protokolünü kullanması gerekir. Bu durumda Server’ın URL’i, http:// diye değil https:// diye yazılır.

ASP açısından sertifika ile ilgili her türlü bilgi ClientCertificate kolleksiyonunda durur. Sözgelimi, bir ziyaretçinin gerçekten sitenize girmeye yetkili olup olmadığını anlamak için:

<%SertifikaNo = Request.ClientCertificate(SerialNumber) %>

gibi bir kodla istemcinin Sertifika seri numarasını SertifikaNo değişkenine atayabilir ve daha sonra bu değişkenin değerini elinizdeki bir liste ile karşılaştırabilirsiniz.

Karşılık (Response) Nesnesi

Ve geldik Web Server’in Çıktı (Output) sağladığı istemciye giden karşılıkların oluşturduğu nesneye. Server’dan Browser’a giden herşey karşılıktır. Bu bir ASP veya HTML sayfası olabilir, sayfanın içindeki GIF, JPG veya PNG grafiği, bir Flash, video veya ses dosyası olabilir. Böylesine zengin içeriği olmakla birlikte Response nesnesinin sadece bir kolleksiyonu vardır: Cookie’ler. Buna karşılık Response nesnesinin kullanabileceğimiz çok sayıda özelliği ve metodu bulunur. Önce Cookie kolleksiyonunu ele alalım; sonra önemli Response nesnesi özellikleri ve metodları üzerinde duralım.

Cookie’ler

Request nesnesinin Cookie kolleksiyonuna değinirken, ziyaretçilerimizi Browser’larına Cookie göndererek tabir yerinde ise işaretleriz, demiştik. Bu işaretleme, söz gelimi, ziyaretçinin bir Form’a yazdığı adı ve soyadı ile elektronik posta adresini Cookie olarak onun bilgisayarına kaydetmek şeklinde olur. Bir kişi sayfamızı talep ettiği anda, ASP programımız bu kişinin bilgisayarında daha önce koyduğumuz Cookie’yi arar ve bulur; Cookie’den bu kişinin adını öğrenir ve mesela sayfamız “Sayın Filanca, sitemize hoş geldiniz!” başlığını görüntüler.

Cookie’ler sadece böyle fiyaka amaçlı olarak kullanılmaz; ziyaretçinin daha önce sitemizde ziyaret ettiği sayfaları veya elektronik ticaret sitemizden satın aldığı kitap türlerini Cookie’ye kaydedebiliriz. Ziyaretçinin ikinci ziyaretinde ona önce bu sayfaların veya kitapların köprülerini sunabiliriz.

Bir Cookie’nin adı ve anahtarları (key) ile bu anahtarlara karşılık değerler olur. Örneğin:

<% Response.Cookie(“Bizim_Cerez”)(“Adi_Soyadi”)= “Necip Fazıl” %>

Bu, ziyaretçinin Browser’ına (yani sabit diskine) “Bizim_Cerez” isimli bir Cookie gönderir; bu Cookie’nin “Adi_Soyadi” adlı bir anahtarı vardır; bu anahtarın değeri ise “Necip Fazıl” olur.

Cookie kolleksiyonunun iki özelliği bulunur:

Expires (zaman aşamı süresi): Bir cookie’nin artık geçersiz olduğu tarihi gösterir.:

<% Response.Cookie(“Bizim_Cerez”).CookieExpires = “August 7, 2000” %>

Bu Cookie, 7 Ağustos 2000 tarihinden sonra kullanılmaz olacak demektir.

HasKeys: Cookie’nin String mi içerdiği yoksa anahtarları ve değerleri mi bulunduğunu belirtir, “HasKeys = False” birinci, ““HasKeys = True” ise ikinci durumu belirtir. Bir Cookie’de birden fazla anahtar ve değer bulunuyorsa, tümünü bir ASP kodu içinde yazmak, Cookie’nin gönderilmesini kolaylaştırır

Metodlar

Response nesnesinin bir çok metodu vardır; bunlardan .Write’ı yukarıdaki örneklerde sık sık kulandık:

<%

DIM Adi_Soyadi

Adi_Soyadi = “Necip Fazıl Dayanır”

Response.Write(“Merhaba, benim adım, “ & Adi_Soyadi)

%>

örneği, ziyaretçinini Browser penceresine: “Merhaba, benim adım Necip Fazıl Dayanır” yazdırır. Fakat VBScript, size bir kolaylık sağlar; buna bazı ASP tasarımcıları “eşittir metodu” adını verir:

<%

DIM Adi_Soyadi

Adi_Soyadi = “Necip Fazıl Dayanır”

%>

<%= “Merhaba, benim adım, “ & Adi_Soyadi %>

Özellikler

Response nesnesinin bir çok özelliğini kullanarak ziyaretçimize göndereceğimiz sayfaları ve diğer unsurları yönetiriz:

Buffer (Tampon) : True (doğru) olarak ayarlandığında ziyaretçiye gönderilecek sayfanın bütün unsurları bir tampon bölgede toplanır, Script’in çalışması bitinceye kadar beklenir ve HTML sayfa toptan gönderilir. Kimi zaman ASP kodumuz sonuna kadar çalıştığında ziyaretçiyi başka bir sayfaya ve siteye yönlendirebilir. Bu gibi sebeplerle, özellikle çok işlem gerektiren ASP sayfalarının baştarafına bunu sağlayan kodu koymakta yarar olabilir:

<%

Option Explicit

Response.Buffer = TRUE

%>

Flush (hemen gönder): Buffer metodu sayfanın tümünün Script’in icrası bitmeden gönderilmesini önlerken, Flush bunun tam tersini yapar. ASP, Response nesnesinin Flush metodu kullandığımızı gördüğü anda, o ana kadar icra edilmiş kodun sonucu olan HTML’i Browser’a gönderir:

<%

Option Explicit

Response.Flush

%>

Clear (Boşalt): Buffer metodu ile Script’in sonunu beklerken geçici bir alanda tutulmakta olan HTML, Clear metodu ile temizlenir, yok edilir. Flush metodunda tampondaki HTML Browser’a gönderilir; ancak Clear metodu tampon bölgedeki herşeyi yok eder. Böyle “tehlikeli” bir metod neden vardır, ve nerede kullanılabilir? Bir çok yerde: ziyaretçinin sözgelimi elektronik alışveriş sitemizde alışverişten vazgeçtiğini belirtmesi üzerine tampon bölgede tutmakta olduğumuz ve alınan mallar listesini içeren HTML’i bu yöntemle temizleriz:

<%

Option Explicit

Response.Clear

%>

Expires (Süresi dolar): Kullanıcı tersine bir ayar yapmadıysa, Browser genellikle görüntülediği sayfaları Geçici Internet Dosyaları dizinine (cache) kaydeder ve tekrar aynı sayfayı görüntülemek istediğinizde sayfayı Internet’ten edinmek yerine kendi sabit diskinden alır. Oysa özellikle haber gibi süreli bilgilerin sunulduğu Web sitelerinde bu sitenin itibarını sarsar. ASP tekniğiyle bunu önleyebiliriz. ASP sayfamızda bu sayfanın gözgelimi 60 dakikadan fazla cach dizinde tutulmamasını sağlayacak Expires metodunu kullanabiliriz:

<%

Option Explicit

Response.Expires = 60

%>

Burada yazdığımız rakamı değiştirerek, sayfanın cach’de tutulacağı dakikayı değiştirebiliriz. “Expires = 0” sayfanın hiç saklanmamasını sağlar.

End (Son): Response nesnesinin o anda icra edilmekte olan Script’i durdurarak, o ana kadar ne elde edilmişse hepsini Browser’a göndermesini sağlayan metodu olan End, aynı zamanda Buffer metoduyla tutulan HTML’in de gönderilmesine yol açar. Bu metoddan sonraki HTML veya ASP kodları icra edilmez:

<%

Option Explicit

Response.End

%>

Response nesnesinin ASP sayfasının çıktı kontrolünü sağlayan bu metodlarını aşağıdaki eğlenceli Script’le sınayabilirsiniz (ASP ile eğlence de bundan daha fazla olamaz!). Burada Browser’a gitmesi ümidiyle üç cümle var. Programı çalıştırın ve bakalım hangisi ekranda kalacak? Bu kadar eğlendiğinize göre şu soruyu da yanıtlayabilirsiniz: Neden?

<% @LANGUAGE = VBScript %>

<%

Option Explicit

Response.Buffer = True

Response.Expires = 60

%>

<HTML>

<BODY>

Bu 1 Numaralı mesajı mı Browser’a gidecek?

<%

Response.Clear

Response.Expires = 0

%>

<HTML>

<BODY>

Bu 2 numaralı mesaj mı Browser'a gidecek)

<%

Response.Flush

%>

</BODY>

</HTML>

<%

Response.End

%>

Bu 3 numaralı mesaj mı Browser’a gidecek?

</BODY>

</HTML>

Uygulama (Application) ve Oturum (Session) Nesnesi

ASP’nin varlık sebebi, standart CGI’ın yetersiz kaldığı noktalardan biri olan Web Server’ın her bir Web ziyaretçiyi oturumunun başından sonuna izleyebilmesi içindir, dersek durumu abartmış olmayız. ASP açısından, bir site “uygulama programı” (Application) sayılır. Her ziyaretçi de bir “oturum” (Session) sayılır. Bir takım ASP ve HTML sayfalarından oluşan bildiğimiz Site’ye application, her hangi bir ziyarete de session denmesinin sebebi nedir? Bunu her iki nesnenin işlevleri ile açıklayabiliriz.

Application nesnesi, sitenin tümüyle ilgili bilgileri (değişkenleri, nesneleri ve metodları) tutar; Session nesnesi ziyaretçinin sitemize girmesinden itibaren izini sürer. Diyelim ki bir borsa sitesi yaptınız; ziyaretçileriniz gelerek, satışa sunulan hisse senetlerinin değerlendirmelerini okuyacak ve size “Şu, şu hisse senetleri al!” diye talimat bırakacak. Bütün ziyaretçilerinizin erişeceği sadece bir veritabanınız var; buna karşılık her bir ziyaretçinin yapacağı farklı tercihler, vereceği farklı kararlar olacaktır. Application nesnesi, sitenizle (artık site yerine Web Uygulama Programı desek de ağzımız alışmaya başlasa!) veritabanına erişmekten tutun, alışverişlerie kadar sitede yapılacak bütün işlerin bütün kurallarını bilecek ve uygulayacak; Session nesnesi ise sözgelimi benim alışverişlerimi, tercihlerimi bilecektir.

HTML ve Javascript ile biraz oynadıysanız, bilirsiniz ki bir sayfadan ötekine değişken değeri aktarmak, imkansıza yakın derecede zordur. Değişkenlerin ömrü, fonksiyonla sınırlıdır. Bir ASP sayfasında herhangi bir değişkeni fonksiyon dışında tanımlamakla ve değer atamakla onu bütün fonksiyonlar için geçerli hale getirebiliriz. Fakat kimi zaman isteriz ki, bir fonksiyonun değeri bütün sayfalarda aynı olsun; ziyaretçinin sayfa değiştirmesi ile değişkenin değeri değişmesin. Bunu ASP’de yapmak çok kolaydır. ASP’de bu zorluğu yenebilmek için değişkenlerimizi Session nesnesi için oluşturabiliriz; ve bu değer ziyaretçinin oturumu boyunca devam eder; bütün ASP sayfalarındaki bütün Fonksiyonlar tarafından bilinebilir. Örneğin:

Session (“Tupras”) = 44500

bütün Session için geçerli bir Tupras değişkeni oluşturur ve ona “44500” değerini atar. Kimi zaman, değişkenin çok daha geniş kapsamlı olmasını, yani ömrünün Session ile değil bütün Application boyunca belirli olmasını isteyebiliriz. O zaman bu değişkeni Application düzeyinde tanımlayabiliriz:

Application (“Tupras”) = 44500

Bu durumda Tupras değişkeni bütün ziyaretçiler için aynı değere sahip olacakatır.

Session nesnesinin oluşabilmesi için, ziyaretçiye mutlaka bir Cookie göndererek, sitemizde (hani “Uygulama Programı” diyecektik?) bir işaret vermemiz gerekir. Daha önce, HTTP ile kurduğumuz bağlantı, belirsiz durum bağlantısıdır demiştik. Bu, Server’ın bir ziyaretçiye arzu ettiği sayfayı gönderdikten sonra, onu alıp almadığını, o sayfada ne tercihler yaptığını bilmemesi demektir. Oysa, ziyaretçiye sitemize bağlandığı anda bir Session kimliği verirsek ve her yeni sayfa talebinde bu kimliği kontrol edersek, kimin hangi oturumunu sürdürdüğünü biliriz. ASP–uyumlu bir Web Server, ziyaretçi yeni bir tercih yapmadığı taktirde her Session nesnesini 20 dakika açık tutar; sonra siler. Bu süreyi Session nesnesinin Timeout özelliği yoluyla değiştirebilirsiniz. Session belirleyen Cookie ASP-uyumlu Web Server tarafından otomatik olarak gönderilir ve takip edilir; tasarımcı olarak bizim bu konuda bir şey yapmamız gerekmez.

Bir Web programınıza aynı anda kaç kişi ulaşırsa (yani sayfalarınızı kaç kişi talep ederse), o kadar Session nesnesi oluşur; fakat siteniz bir adet olduğuna göre bir adet Application nesnesi vardır. Bu nesnenin bütün Session’lar için sitemizin ihtiyaçlarına uygun ve aynı uygulama kurallarına sahip olmasını sağlayan bir dosya vardır: Global.asa. Bu dosya PWS veya IIS kurulurken oluşturulur. ASP ile Web programlarınızı, örneğin MS Visual Studio ile oluşturuyorsanız, program sizin için seçtiğiniz dizinde bir Global.asa dosyası oluşturacaktır. Bu dosyada, çoğu zaman, sitemize ilk ziyaretçinin gelmesiyle oluşan Application_OnStart ve son ziyaretçinin çıkmasıyla oluşan Application_OnEnd ile herhangi bir ziyaretçinin bir sayfaya erişmesiyle oluşan Session_OnStart ve ziyaretçinin sitemizden çıkması ile oluşan Session_OnEnd olayları halinde ne yapılacağı yazılıdır. Bu dosyanın içeriği standart bir ASP dosyasına benzemekle birlikte adındaki uzatmanın .asp değil de .asa olmasının sebebi, dosyanın Active Server Application dosyası olmasıdır. ASP-uyumlu bir Web Server programı sitemize ulaşan ilk ziyaretçiyi gördüğü anda Global.asa dosyasını çalıştırır.

Application ve Session nesnelerin kendi başlarına en çok kullanıldığı yer, sitemize gelen ziyaretçilerin sayısını (sitemizin aldığı Hit sayısını) tutmasını sağlamaktır. Bu genellikle Global.asa pogramına bir sayaç yerleştirilerek yapılır.

ActiveX Veri Erişim (ADO) Nesneleri

ASP’nin diğer CGI tekniklerine göre kolay olmasının (peki, kabul, “kolay görünmesi” diyelim!) belki de sadece veri erişimini adeta çocuk oyuncağı haline getirmesidir. ADO, gerçekte bir ASP nesnesi olmaktan çok Server Component’i (sunucu bileşeni) sayılır. Bu bileşene biz ASP içinden bir ActiveX nesnesi ile ulaşırız.

Veritabanı, günümüzde giderek Web Programlarının temelini oluşturuyor. Sayfaların unsurları veritabanı dosyasından alınıyor; ziyaretçilerin verdikleri bilgiler veritabanına yazılıyor. Bu gelişimin başlıca sebebi, veritabanının site güncelleştirme işlerini kolaylaştırmasıdır. Söz gelimi bir sayfadaki seçenekleriniz, bir veritabanından alınıyorsa, bu seçenekleri alan VBScript kodu hiç değişmeden kalacak ve siz sadece veritabanı dosyanızda ilgili verinin alındığı alana yeni değerler girerek, sayfanızı sürekli güncel tutmuş olacaksınız. Bir diğer sebep ise veritabanı dosyalarının idaresinin kolay olmasıdır. Sözgelimi ziyaretçilerinizden aldığınız bilgileri daha sonra muhasebe kayıtlarınıza veya adres defterinize, müşteri kütüğüne ya da başka suretle kayda geçirmek istiyorsunuz. Ziyaretçilerimizin form yoluyla bize ilettiği bilgileri düzyazı dosyasına işlemenin yollarını Dosya sistemi Nesnesi’ni (FileSystem) görürken, ele aldık. Bunu yapabiliriz kolayca. Ama daha sonra düz yazı dosyasının idaresi, veritabanının idaresi kadar kolay olamaz. ASP sayfalarınız Access, Excel, Paradox, FilePro, SQL Server ve Oracle veritabanlarına ve spreadsheet dosyalarına erişebilir; bu dosyalardan veri okur ve bu dosyalara veri yazabilir. Özetle, ASP programlarımızla, SQL-uyumlu veya Windows ve diğer sistemler için yazılmış ODBC (Open Database Connectivity/Açık Veritabanı Bağlantısı) ile uyumlu her türlü dosyaya, ADO nesnesi aracılığıyla ulaşabiliriz.

///////////////////KUTU//////////////////

ODBC ve OLE-DB

Bu kitapçığın baştarafında, ASP dosyalarınızı geliştirmeye başlamadan önce bilgisayarınızda ODBC (Open Database Connectivity/Açık Veritabanı Bağlantısı) sürücülerinin kurulu olması gerektiğini belirtmiştik. ODBC, ADO’nun kullandığı tek sistem değildir; ve Microsoft firması, ODBC’nin yerine hızla OLE-DB adını verdiği yeni bir teknolojinin alması için yoğun çaba içinde. OLE-DB, ODBC’nin Web’de sağladığı başarının üzerine bina edilen yeni bir teknoloji. ODBC, ilişkilendirilmiş (relational) veritabanlarına erişmek üzere tasarlandığı halde OLE-DB her türlü veritabanına erişebilir. OLE-DB, ASP programlarımıza yen

Yorumlar (0)add comment

Yorum Yazın
quote
bold
italicize
underline
strike
url
image
quote
quote
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley

busy
 
< Önceki   Sonraki >
Advertisement