Asp’nin Temelleri-2

1.1.   Request Nesnesi

Request nesnesi bir bilgi alma nesnesidir. Bu nesne yardımı ile yazdığımız scriptler dışarıdan veya bir önceki sayfadan bilgi almakta kullanılır. Bünyesinde beş adet ana fonksiyon bulundurmaktadır. Bunlar;

 

  1. Cookie
  2. ServerVariables
  3. Form
  4. QueryString
  5. TotalBytes

1.1.1.      Veri Transferi

İstemci tarafında, request nesnesine bilgi depolanır ve sunucuya HTTP belge isteğinin bir parçası olarak gönderilir. Sunucu bu bilgiyi dekod eder ve ASP boyunca kullanılabilir hale getirir. Sunucuya bilgi göndermenin iki yöntemi vardır; birincisi sayfadaki <form> kısmını kullanmak ve ikinci olarak da URL’nin sonuna bir sorgu stringi gibi eklenerek doğrudan sağlanabilir.

 

Bu veriyi bir ASP scriptine göndermek için HTML içinde form oluşturmak ile mümkün olmaktadır. Eğer formun metod özelliği “GET” şeklinde ise verimiz URL sonuna ekli olarak gönderilmektedir. Ama formun metod özelliği “POST” şeklinde ise verimiz HTTP belgesinin bir parçası olarak gizli şekilde gönderilmektedir.

 

Gerek form içerisinde gerekse URL sonunda string olarak gönderilen verileri ASP içerisinde kullanmak için veriyi (server tarafından dekod edilmiş bilgiyi) bir değişkene aktarmak gerekmektedir.

 

Bunu ASP içinde 2 farklı şekilde yapmaktayız. Bu farklılık verinin gönderiliş tarzından ileri gelmektedir. Eğer verimiz URL sonunda bir sorgu stringi şeklinde gönderilmiş ise veriyi:

 

<%

   isim = request.querystring(“veri”)

%>

Örnek 102 : QueryString ile Veri Alımı.

 

Şeklinde alabilmekte ve asp içerisinde kullanabilmekteyiz. Bu kod içinde “isim” değişkenine URL sonuna ek veri olarak gönderilen “veri” datasını verdik. Nesne metodunun isminden de anlaşılacağı gibi “querystring” yani sorgu cümleciği şeklinde bir veri transferi yapılmıştır. Bu data url sonunda şu şekilde gözükmektedir.

 

Test.asp?veri=”M. Günce”

 

Yukarıda ki örnekdende görüleceği gibi “M. Günce” verimizi test.asp sayfasına URL sonuna eklenmiş olarak gönderdik. Ve bunu yaparken ara değişken olarak “veri”’yi kullandık. (unutmadan belirtmekte fayda gördüğüm bir nokta da URL sonuna eklenmiş olarak gönderilen verileri form kullanmadan da göndermek mümkün olmaktadır. Bu şekilde form olmayan scriptlerimizde de sayfalar arası veri transferi yapmamız olağan hale gelmiştir.)

 

Bu veri transferini yapmanın bir diğer yolu da gönderen form özelliğini “POST” yaparak mümkün olmaktadır.  Bu özellik sayesinde verilerimiz URL satırında gözükmeden alıcı tarafından kullanılabilmektedir.

 

Eğer verimiz form içerisinde “POST” şeklinde gönderilmiş ise bunu ASP içerisinde bir değişkene şu şekilde verebiliriz.

 

<%

   isim = request.form(“veri”)

%>

Örnek 103 : Form ile Veri Alımı.

 

Yukarıdaki örneğin aynısını bu defa form içerisinde gizli olarak gönderdik.  Tek farkımız URL satırında veri gözükmemesidir (bu bilgi sunucuya gönderilen URL isteğinin içerisinde gömülü olarak, başlık olarak gönderilmiştir) yani;

 

Test.asp

 

Şeklinde bir URL görmemizdir. Bu özellik sayesinde hem URL satırını gereksiz doldurmamış hem de verilerimize gizlilik kazandırmış olmaktayız. (Not: bu veri transferi tipini sadece form kullanarak veri gönderdiğimiz zaman kullanabilmekteyiz.)

 

Bir request nesnesini hiçbir metod kullanmadan çağırmamız halinde; yani

 

Isim = request(“veri”)

 

Şeklinde bir kullanım olduğu zaman ASP bu nesnenin metodlarını bir sıra içerisinde dener. Bu sıra

 

-QueryString

-Form

-Cookie

-ServerVariables

 

şeklindedir. Bu şekilde kullanmanız size kodlamada zaman ve hız kazandırabilir. Fakat sistem kaynaklarından kullanarak birkaç denemede veriyi alacağı için performansta bir düşme yapabilecektir.

 

Bir formdan veri isteğinde bulunurken dikkat etmeniz gereken bir diğer nokta da veriyi alacağınız HTML elemanının tipidir. Şimdiye kadar anlatılan veri alımı sadece normal textbox için geçerli idi fakat diğer öğeler için gelen veriler farklı olacaktır.

 

Bir formdan gönderilen verinin hepsini teker teker aldırmaktansa bir döngü içerisinde bu işlemi kolayca yapabiliriz. Bu döngü aşağıdaki gibi olacaktır;

 

<%

For Each objitem in Request.Form

  İf request.form(objitem).count > 0 then

    For intLoop = 1 to Request.Form(objitem).count

    Objitem = request.form(objitem)

  End if

Next

%>

Örnek 104 : Formdaki Tüm Veriyi Alma.

Yukarıdaki örnekte bir önceki formdan gönderilen değiskenlerin değerleri kendi isminde bir değişkene atanmiş oldu. Bu sekilde bir kullanımla onlarca satır kod yazmaktansa tüm form elemanlarını basitce alabilmektesiniz.

1.1.2.      Server Variables

Request nesnesinin sağladığı bir diğer özellik de “sunucudeğişkenleri” dir. Bir istemci tarafından serverda bir ASP programcığının çalıştırılmasıyla server kullanıcı için bir takım  değişkenler oluşturur. Bu değişkenler ASP programcığını çalıştıran her kullanıcı (client) için farklılık taşıyabilir. Bu oluşturulan değişkenleri server variables özelliğini kullanarak programımız içerisinde kullanılabileceğimiz bir değişkene atayabiliriz. Server variables özelliği ile serverdan hangi değişkeni alıcağımızı ise “istek metodu” yardımı ile yaparız. Aşağıda server variables özelliğinin kullanımı gösterilmektedir.

 

<%

   değişken = Request. servervariables(“istekmetodu”)

%>

Örnek 105 : ServerVariables Kullanımı.

 

Bu örnekte server tarafında olan bir değişkeni programcığımız içerisinde kullanmak amacıyla bir değişkene atadık. Bunu da yapmak için request (istek) nesnemizin server variables özelliğini kullandık.

 

İstek metodu serverdan alacağımız değişkenin tanımıdır. Bu metodları ise aşağıdaki gibi sıralayabiliriz.

 

AUTH_TYPE                               Kullanıcı kimlik doğrulama tipi.

CONTENT_LENGTH                     İstemci tarafından gönderilen veri boyutu (byte biriminde)

DOCUMENT                               O an kullanılmakta olan doküman dosyasının adı.

DOCUMENT_URL                        O an kullanılmakta olan doküman dosyasının sanal yeri.

DATE_GMT                               Server’ın o anki tarihi (GMT formatında)

DATE_LOCAL                            İstemcinin o anki tarihi (GMT formatında)

GATEWAY_INTERFACE   Ağ geçidini CGI tanımları

LAST_MODIFIED                        O an kullanılmakta olan doküman dosyasının son değiştirilme tarihi

LOGON_USER                            Server’da giriş yapmış NT kullanıcısı hakkında detay

PATH_INFO                               İstemci tarafından sağlanan ek yol bilgisi

PATH_TRANSLATED                   Fiziksel dizin adına çevrilmiş sanal yol

QUERY_STRING                         URL dizisi sonundaki soru işareti ile (?) ayrılmış bölümden sonraki bilgi.

REMOTE_ADDR             İstemcinin IP adresi

REMOTE_HOST              İstemcinin Host adı

REMOTE_IDENT                         Eğer RFC931 doğrulamasını destekliyor ise istemcinin Host adı

REMOTE_USER                          Sunucu tarafından yetkilendirilen istemcinin kullanıcı adı

REQUEST_METHOD                    İstemcinin yolladığı istek metodu tipi.

SCRIPT_MAP                             Scripting için kullanılan harita.

SCRIPT_NAME               Çalıştırılacak uygulama yada script adı.

SERVER_NAME              Sunucunun IP adresi veya Host adı.

SERVER_PORT                          İstemciden isteği alan port adresi http için 80 değerini alır

SERVER_PORT_SECURE             İsteğin şifreli portda olması durumunda “true” (1) değerini alır.

SERVER_PROTOCOL                  Protokol adı ve versiyonu, genellikle HTTP/1.1 sunucu ve istemci tarafındaki yazılıma bağlıdır.

SERVER_SOFTWARE_URL           Web sunucusunun yazılımının adı ve versiyonu ve o anki sayfasının URL adresi

 

Bu istek metotlarından bir kaç tanesini örnekle açıklamak gerekirse.

 

<%

  IP = Request. servervariables(“REMOTE_ADDR”)

%>

Örnek 106 : Kullanıcı IP Adresinin Öğrenilmesi.

 

Bu programcık çalıştıktan sonra IP değişkenine kullanıcının IP si olan “195.174.129.113” şeklinde bir değer alır.

 

<%

   SN = Request. servervariables(“SCRIPT_NAME”)

%>

Örnek 107 : Script Adının Öğrenilmesi.

 

Bu programcığın çıktısı olarak SN değişkenimize o an çalışmakta olan scriptin adı dönecektir. Örneğimizde bu “script_name_test.asp” şeklindedir.

 

<%

   LM = Request. servervariables(“LAST_MODIFIED”)

%>

Örnek 108 : Son Düzenlenme Tarihinin Öğrenilmesi.

 

Bu scriptimizde ise LM değişkenine o an çalışmakta olan programcığın en son düzenlenme tarihi atanacaktır. Örneğimizde bu “03/09/2001” şeklinde olacaktır.

 

<%

   RM = Request. servervariables(“REQUEST_METOD”)

%>

Örnek 109 : İstek Metodunun Öğrenilmesi.

 

Request metod özelliğini kullanan bu örnekte ise RM değişkenimize örneğe gönderilen verinin gönderiliş biçimi atanacaktır. İki farklı değer karşımıza çıkabilir bunlar GET yada POST olacaktır (eski konularımızda form ile veri gönderme konusunda bilgi verilmişti).

1.1.3.      Cookies:

Cookieler, Netscape tarafından, web sunucularıyla istemcilerin etkileşiminde ortaya çıkan bir açığı düzeltmek için geliştirildi. Cookieler olmadan, web sunucuları ve tarayıcılar arasındaki etkileşim bir monologdan farklı olmazdı. Yani server clientdan gelen bilgileri saklayabilirken, istemciler bu işlemi yapamayacaklardı.

 

Bu işlem için Cookieler kullanılmaya başladı. Böylece asp programları da istemci tarafında veri kaydı yapabilecek ve bunu istediği zaman kullanabilecektir.

 

Ön bir bilgi verecek olursak şöyle söyleyebiliriz: Cookieler response nesnesi ile kaydederken request nesnesi ile okutulabilen metin dosyaları şeklinde söyleyebiliriz.

 

İki tür Cookie mevcuttur: oturum Cookieleri ve kalıcı Cookieler. Oturum Cookieleri hafızada saklanırlar, diğer taraftan kalıcı Cookieler aylarca hatta yıllarca kalabilirler. Kalıcı Cookieler kullanıcının bilgisayarında metin dosyası olarak saklanır.

 

Request nesnesi ile response nesnesinin Cookie özelliği ile kaydedilmiş Cookieleri çağırabiliriz (not: response nesnesi ileri ki bölümlerde ayrıntılı açıklanacaktır). Response nesnesi ile Cookie kaydı şu şekilde yapılır:

 

<%

   Response.Cookies(“degisken”) = deger

%>

Örnek 110 : Çerezlere Değer Atamak.

 

Bu şekilde “degisken” isimli cookiemize bir değer atamış olduk.

 

Kaydedilmiş bir cookieyi asp programcığı ile alıp bir değişkene atamak için ise,

 

<%

   deger = Request.Cookies(“degisken”)

%>

Örnek 111 : Çerezden Değer Okumak.

 

Görüldüğü üzere request nesnesini kullanarak değer isimli cookiemizi bir değişkene atadık. Ve bu şekilde asp scriptimiz içerisinde istediğimiz gibi kullanabiliriz.

 

Cookieler alt anahtarlara bölünebilir. Yani bir diğer değişle alt kategorilere ayrılabilir. Örnek vermek gerekir ise:

 

<%

   degisken = Request.Cookies(“deger”)(“altdeger”)

%>

Örnek 112 : Çereze Alt değer vermek.

 

Yukarıdaki örneğimizde değer kategorisine ait alt degeri değişkenimize aktardık. Bu şekilde kullanılan Cookieler için alt anahtarlarını olduğunu belirtmek gerekmektedir. Bunun için ise :

 

<%

   degisken = Request.Cookies(“deger”).HasKey

%>

Örnek 113 : Çerezlerde Alt değer Kullanılacağını Belirtmek.

 

Şeklinde bir tanımlama gerekmektedir. Bu şekilde kullandığımız cookienin alt anahtarlarını kullanacağımızı belirtmiş oluyoruz.

 

Aynı şekilde Cookielere veri kaydı yaparken (response nesnesi ile) alt anahtarlar kullanılabilir.

1.1.4.      TotalBytes:

Request nesnesinin bize sunduğu kolaylıklardan bir tanesi de TotalBytes özelliğidir. Bu özellik sayesinde request nesnesi ile istemciden alınan bilgilerin (querystring, form ve Cookie yardımı ile) toplamda ne kadar veri içerdiğini gösterir.

 

Örneğin istemci tarafından doldurulan bir form içerisinde 100 karakter var ise ve bu server da ki bir asp tarafından request nesnesi ile alınıyorsa TotalBytes özelliğimiz de 100 değerini alır. Yani istemciden sunucuya gönderilen verinin tamamının byte biriminden değeridir.

 

Kullanımı oldukça basit olan bu nesne çok fazla kullanım alanına sahip olmamakla birlikte bazı durumlarda oldukça işe yarar.

 

<%

   sayac = Request.TotalBytes

%>

Örnek 114 : TotalBytes Özelliği.

 

Yukarıdaki örneğimizde istemciden sunucuya gönderilen verinin miktarını “sayac” isimli değişkenimize atadık.

1.2.   Response Nesnesi

Bu nesnemiz bünyesinde on adet fonksiyon bulundurmaktadır. Bunlar

 

  1. Cookie
  2. Buffer
  3. Expires
  4. ExpiresAbsolute
  5. isclientconnected
  6. Add Header
  7. Clear
  8. End
  9. Flush
  10. Redirect
  11. Write

 

Bu fonksiyonlardan bir tanesini request nesnesi içerisinde anlatmış fakat tam anlaşılması için response nesnesi ile beraber kullanılmalı ve anlatılmalı demiştik.

1.2.1.      Cookie (çerezler):

Kalıcı Cookielere asp içerisinde Cookie komutu ile erişim sağlayıp üzerinde işlem yaptırtabiliriz. Bunu iki farklı şekilde yaparız.

 

Bunlardan ilki bir Cookie kaydetmek için kullandığımız yöntemdir. Bu yöntem response nesnesinin içerisinde kullanılır. Bu şekilde istenilen değişkenler bilgisayar üzerinde kalıcı olarak saklanır ve programlarımız tarafından direkt çağrılarak kullanılır.

 

Aşağıda bir  Cookie değişkeninde nasıl veri saklanacağına ilişkin kod yer almaktadır. Dikkate edilecek olursa değişken tipi ne olursa olsun değişken adı eşitliğin sol tarafında yazılmıştır. Değişkene verilecek değer ise eşitliğin sağındadır.

 

<%

   Response.Cookie(“ad”) = “gunce”

%>

Örnek 115 : Çereze Değer Atamak.

 

Yukarıdaki örneğimizde response (yanıt) nesnesini kullanarak “ad” isimli çerezimize (Cookie) gunce değerini atadık. Bu şekilde kaydettiğimiz Cookie ziyaretçi bilgisayarında bir sonraki işlemimize kadar saklanacaktır.  (genel kullanım)

 

Bir Cookie, Cookie adı ve anahtar (key) ile bu anahtara karşılık bir değerden oluşur. (anahtar kısmı zorunlu kullanım değildir kullanıl masada olur ama işlevsellik açısından kullanmak faydalıdır).  Örneğin:

 

<%

   Response.Cookies(“cerez”)(“ad”) = “Haldun Özer”

%>

Örnek 116 : Çereze Alt değer Atamak.

 

Yukarıdaki örnekte ziyaretçinin bilgisayarında çerez isminde bir Cookie oluşturup bu Cookie içerisinde ad değişkenine Haldun özer değerini atamış olduk.  Bu şekilde verilerimizi daha derli toplu bir şekilde saklayarak hem kullanım hem de güvenlik açısından kolaylık sağlamış oluruz.

 

Bir çereze istediğiniz içeriği koyabilirsiniz. Bununla birlikte, çerezlerin belirli sınırlamalarının da farkında olmanız gerekir. Orijinal Cookie spesifikasyonuna göre (http://home.netscape.com/newsref/std/cookie_spec.html), bir tek bilgisayar bütün web sitelerinden toplam en fazla 300 çerez bulundurabilir. Ayrıca, tek bir web sitesi ziyaretçinin bilgisayarına 20’den fazla çerez ekleyemez. Son olarak belirli bir Cookie 4 KB’tan fazla veri barındıramaz. Bu sınırlama, çerezin isminin boyu ve çerez içinde bulunan bilginin boyutuna göre ayarlanır.

 

Cookie fonksiyonunun veri alışverişi dışında iki adet özelliği vardır bunlar yardımı ile sistemlerimizi daha interaktif geliştirmemiz mümkün olmaktadır. Bunlardan ilki Expire (zaman aşımı süresi) dir.

1.2.1.1.            CookieExpire

Cookielerimizi ziyaretçinin bilgisayarına kaydettik, kaydettik de bu çerezler ne zamana kadar o bilgisayarda duracak onu kaydetmedik? İşte bu soruya yanıt bulmaya çalışan Microsoft ustaları Cookie fonksiyonuna bir özellik ekleyerek bu engeli aşmışlar.

 

Bu özellik sayesinde cookie’lerin ömrünü belirleyebilirsiniz. Bu tarih geçtikden sonra çerezlerimiz artık kullanılmaz olacaktır. Örneğin :

 

<%

   Response.Cookies(“cerez”) = “Haldun Özer”

   Response.Cookie(“cerez”).CookieExpires = “November 14, 2001”

%>

Örnek 117 : Çerezlere Geçerlilik Süresi Atamak.

 

 Bu örnekte kullandığımız “cerez” isimli Cookie “14 Kasım 2001” tarihinden sonra kullanılamaz hale gelecektir.

1.2.1.2.            HasKeys

Cookie’lerin alt anahtarlar içererek birçok değişkeni bir tek cookiede tutabileceğini yukarıda örnekleyerek anlatmıştık. Bu özelliğin kullanılabilmesi için belirtilmesi gerekir bunun içinde haskeys komutu kullanılır. Örneğin :

 

<%

   Response.Cookies(“cerez”).(“a”) = “Refiye”

   Response.Cookies(“cerez”).(“b”) = “Meral”

   Response.Cookies(“cerez”).(“c”) = “Özge”

   Response.Cookie(“cerez”).CookieExpires = “November 14, 2001”

   Response.Cookies(“cerez”).HasKeys

%>

Örnek 118 : HasKeys Kullanımı.

 

Bu kullanım tarzı ile cerez isimli cookimize 3 adet alt anahtar atayıp bu anahtarlara bir değer verdik. Daha sonra bu cookiemizin ömrünü ayarladık ve alt anahtarları (dictinary) kullandığını belirttik. Böylece alt anahtar kullanan 14 kasım 2001 son kullanım tarihli bir çerez yaratmış olduk.

 

Cookilerin ziyaretçinin bilgisayarına nasıl kaydedeceğimizi öğrenmiş olduk. Peki bu çerezleri bilgisayardan nasıl geri çağıracağımızı biliyor muyuz? İsterseniz bir de bu konuya göz atalım.

 

Not: Bir siteyi ziyaretimizde bilgisayarımıza kaydedilen bir çerezi sadece o site geri çağırıp kullanabilir. O site dışındaki siteler yetkisi olmayan cookilere erişemez.

1.2.1.3.            Çerezleri Okumak:

Yukarıda anlatılan şekilde kaydettiğimiz çerezlerimizi programlarımız içerisinde geri çağırmak için request (istek) nesnesinin Cookie fonksiyonunu kullanabiliriz. Örneğin :

 

<%

   ad = Request.Cookies(“cerez”)

   Response.Write ad

%>

Örnek 119 : Çerezden Veri Almak.

 

Yukarıdaki örneklerde kaydettiğimiz “cerez” isimli cookieyi request nesnesini kullanarak geri çağırdık ve ad değişkenine atadık. (dikkat edilecek olursa değer atanacak değişken eşitliğin solunda, bu değişkene atanan değer ise eşitliğin sağında yer almaktadır).

 

Bu şekilde basit çerezleri okuyabileceğimiz gibi alt anahtarları olan bir çerezide aşağıdaki şekilde okuyabiliriz.

 

<%

   a=Request.Cookies(“cerez”).(“a”)

   b=Request.Cookies(“cerez”).(“b”)

   c=Request.Cookies(“cerez”).(“c”)

 

Response.Write a

Response.Write b

Response.Write c

%>

Örnek 120 : Çerezden Alt veri Almak.

 

Örneğimizde 3 adet alt anahtara sahip bir cookienin nasıl okunduğu görülmektedir. Unutmadan belirtmekte fayda gördüğüm bir konuda şu; kayıt yaparken kullandığınız çerez adını çerezi okuturken de aynen kullanmanızdır. Aksi hallerde hata ile karşılaşırsınız.

1.2.2.      Buffer

Response nesnesinin bize tanıdığı bir diğer kolaylık ta Buffer (tampon) özelliğidir. Standart bir asp programcığı server da derlendiği an ziyaretçinin browserine yollanır.

 

Bu işlemin kontrolunu buffer komutu ile yapmaktayız. Varsayılan değeri false (yanlış) olan bu özellik eğer aktif hale geçirilir ise serverda bulunan script server tarafındaki derlenme işlemi bitmeden istekde bulunan istemciye gönderilmez.

 

Bu komutun çalışabilmesi için HTML başlangıç tagından (<HTML>) önce kullanılması gerekmektedir. Özellikle çok işlem gerektiren scriptlerde baş tarafında bu kodun kullanmakta yarar olabilir.

 

<%

   Option Explicit

   Response.Buffer = true

%>

Örnek 121 : Tamponlamayı Ayarlamak.

 

Bilgisayar programlama literatüründe bir verinin işletilmesi bitmeden çıktı verilmemesi işlemine tamponlama yani buffer denilmektedir.

 

Tamponlamanın çalışma biçimini daha iyi anlamak için Diyagram 2 : ASP Dosyalarının İşletilmesi ve İstemciye Gönderilmesi.) yi inceleyebilirsiniz. Diyagramda adı geçen “Hafıza (Cache)” burada adı geçen “Buffer” ile aynı anlamdadır.

1.2.3.      Flush (Hemen Gönder):

Buffer komutunun yaptığı işlemde kod tamamen derlenmeden browsera gönderilmesini engeller demiştik. Flush ise bunun tam aksine o ana kadar işlenmiş (derlenmiş) kodu browser tarafına yollar. Kullanımı ise aşağıdaki gibidir. Programımızın istenilen herhangi bir noktasında o ana kadar işletilmiş kodu ziyaretcinin browserine gönderebilmekteyiz.

 

<%

   …

   …

   Response.Flush

   …

   …

%>

Örnek 122 : Cache’i İstemciye Göndermek.

 

Bu şekilde kullanıldığı zaman response.flush komutunun üzerinde kalan kısım tamamen işletilene kadar beklenir ve bu işletim bittiği anda çıktılar ziyaretçiye yollanır, ve ardından alt tarafta kalan kısım işletilmeye devam eder.

1.2.4.      Clear  (Temizle):

Buffer methodu ile script’in sonuna kadar derlenilmesini beklerken bir alanda tutulan HTML, clear metodu ile tamamen temizlenebilir. Flush metodunda o ana kadar işletilmiş olan kod ziyaretçiye yollanırken clear metodunda ise o tamponda o ana kadar yapılmış tüm işlemler silinir.

 

Böylesine tehlikeli bir metodun kullanım alanlarını sorgulayacak olursak, -ki aklınızda neden böyle bir komut yapılma gereksinimi duyulmuş gibi bir soru kalabilir- birçok yerde sözgelimi elektronik alışveriş sitemizde alışverişten vazgeçildiğinin belirtilmesi üzerine, tampon bölgede tutulmakta olan alınan mallar listesini içeren HTML bu yöntemle temizlenebilir.

 

<%

   …

   …

   Response.Clear

   …

   …

%>

Örnek 123 : Tamponu İstemciye Göndermeden Silmek.

 

Bu şekildeki bir kullanımda clear metodunun üzerinde kalan ve işletilen kodların HTML çıktıları bu satıra gelindiği an temizlenir. Ve tamamen silinir. O satırdan sonraki komutlar ise yine normal olarak ziyaretçiye gönderilir. Bu sayede programcığımızın çıktısını  istenilen anda temizlememiz mümkün olmaktadır.

1.2.5.      Expires (Süresi Dolan):

Kullanıcı aksi bir ayar yapmadıkça ziyaret edilen web siteleri “Geçici İnternet Dosyaları” dizinine (cache) kaydedilir ve bir daha ki kullanımda bu dizinden çağırılarak kullanılır. Bu hız bakımdan artısı olan bir özelliktir. Ama haberler gibi süreli bilgilerin yer aldığı bir sitede bu tip bir uygulama sitenin prestijini sarsacaktır. Bu sistemi asp ile kontrol edebiliriz ve dosyaların cache de en fazla ne kadar saklanacağını  belirleyebiliriz. Bunu ise asp içerisinde response nesnesinin bir metodu olan expires metoduyla yapabilmekteyiz.

 

<%

   Option Explicit

   Response.Expires = 60

%>

Örnek 124 : Expires Methodunu Kullanmak.

 

Bu şekilde kullanıldığı zaman o sayfanın ziyaretçinin cahce kısmında en fazla 60 dakika saklanabileceğini göstermiş olur. Yani bu kodun yer aldığı sayfaya girdikten sonra 60 dakika geçmeden bu sayfaya tekrar girilirse yine cacheden bilgi alınarak ekrana getirilir.

 

Not : bu işlemi atlayarak o anki ziyaret edilmekte olan siteyi serverdan yeniden almak için (cacheden almadan) İnternet Explorer’da CTRL+F5 yapılabilir.

1.2.6.      ExpiresAbsolute

Yukarıda ayrıntılı olarak anlatılan expires methoduna çok benzeyen bir method olan expiresabsolute özelliği, expires özelliği gibi süre sınırı olarak dakika vermektense belirli bir tarih saat verilir. Bu şekilda o tarih ve/veya saat geldiği cache de saklanan dosyaları Expire edebiliriz (yani süresi dolmuştur diyip geçersiz yapabiliriz).

 

<%

   Option Explicit

   Response.ExpiresAbsolute = #25.07.2003#

%>

Örnek 125 : ExpiresAbsolute Methodunu Kullanmak.

Yukarıdaki örnekte belirtilen süre geldiği anda sayfa geçersiz olacaktır. Yani expires methodundaki gibi belirli bir sürede değil belirli bir tarih de sayfa Expire olacaktır.

1.2.7.      isclientconnected

Yalnızca okunabilir bir boolean değer olan bu özellik kullanıcının o anda sunucuya bağlı olup halen dosya çekmekte olup olmadığını analiz eder.

 

<%

   if response.isclientconnected then

      Response.flusfh

   Else

      Response.end

   End if

%>

Örnek 126 : ExpiresAbsolute Methodunu Kullanmak.

Örnekte eğer kullanıcı sunucuya bağlı ve dosya çekmeye devam ediyor ise işletilen kodun direkt kullanıcıya yollanması aksi halde yani kullancı bağlantısını kesmiş ise işletimin bitirilmesi istenmiştir. Bu şekilde sistem kaynakları kullanımı azalacaktır.

1.2.8.      End (Sonlandır)

Response nesnesinim bir diğer metodu olan end metodu o ana kadar işletilmiş olan tüm bilgileri ziyaretciye yollayarak kodun işletiminin durdurulmasını sağlar. Bu işlem sırasında buffer metoduyla da hafızada tamponlanan veri ziyaretciye gönderilir.

 

<%

   …

   Response.End

%>

Örnek 127 : Scripti Sonlandırmak.

1.2.9.      AddHeader (başlıklar):

Response nesnesi bize istemci browserindeki sayfanın HTTP parçasının başlık olarak yollanarak girildiğini, sayfanın yapısının nasıl değiştirilebileceğini, kullandıkları her başlığın birer tekil (unique) sayı olduğunu belirtir. Örneğin yönlendirme (redirection) metodu tarayıcıya 303 başlıklı değerini yollar. Başlığın değeri statuscode olarak alınır ve çoğunlukla response nesnesinin statüsü olur.

 

Bilgi : http://www.w3.org/pub/www/protocols/rfc2068/rfc2068.txt adresinden durum kodlarının tüm listesine ulaşabilirsiniz.

 

Mutlaka şimdiye kadar benzer bir hata mesajı görmüşsünüzdür. 404 (document no found) sayfa bulunamadı gibi. Tüm kodlar 3 dijit içerir normal doküman 200 OK değerini verir. İlk dijit sorunun kaynaklandığı yeri belirtir.

 

İlk dijit 1 olduğu zaman bunun anlamı “bilgi” demektir. İlk dijit 2 olduğu zaman bunun anlamı “başarılı” demektir. İlk dijit 3 olduğu zaman bunun anlamı “yönlendirme” demektir. İlk dijit 4 olduğu zaman bunun anlamı “istemci hatası” demektir. İlk dijit 5 olduğu zaman ise bunun sunucudan kaynaklanan bir hata olduğunu anlayabiliriz.

 

Kendi başlığımızı response nesnesinin addheader metodu ile oluşturabiliriz. Bunun için iki bağlı parametre gerekmektedir. İlki isim ve ikincisi içerikdir. Bunun için aşağıdaki gibi bir yazım geçerli olucaktır.

 

<%

   Response.Addheader “deneme“,”123“

%>

Örnek 128 : İstemciye Gönderilen Belgeye Header Eklemek.

 

Burada “deneme” isimli yeni başlık için “123” değerini tanımlamış oluyoruz.

 

Headerlarla ilgili ufak bir bilgiyi 1.3.3 bölümünde bulabilirsiniz.

1.2.10.  Write (yazdır):

Response nesnesinin en çok kullanılan metodlarından birisi de write metodudur. Bu metod yardımı ile HTML yardımı ile ekrana çıktı alabilmekteyiz. Bu metodun kullanımını bundan önceki sayılarımızda yer yer anlatmıştık. Genel olarak kullanımı aşağıdaki gibidir.

 

<%

   Response.Write “PC World Türkiye”

%>

Örnek 129 : Çıktı Almak.

 

Burada kullandığımız yere bağımlı olarak bir “PC World” çıktısı alınacaktır.

 

Bir diğer kullanım şekli ise başlangıç ve bitiş tagları arasına eşitdir kullanarak yazdırmaktır. Aşağıdaki örnekte görülmektedir.

 

 

<% =Date() %>

 

Örnek 130 : O Anki Tarihi Yazdırmak.

 

Bu örnekte response.write ile aynı anlama gelmekte olan yazdırma biçimi gösterilmiştir. Ve ekrana o an ki tarih çıktısı alınır.

 

Response.write metodunda dikkat edilmesi gereken bir özellik özel karakterlerin yazımıdır. Bu özel karakterlerden en önemlisi “ işaretidir. Bu işaretin kullanımı aşağıdaki gibi olmalıdır.

 

<%

Response.Write “Şampiyon “”Beşiktaş”” “

%>

Örnek 131 : Tırnak İşaretinin Yazdırılması.

 

Görüleceği gibi tırnak kullanılmasını istediğimiz yerlere çift tırnak işareti yerleştirdik.

 

Bu özel karakter yazımının bir diğer yolu da CHR() fonksiyonu yardımı ile yazdırmaktır.

1.2.11.  Redirect (Yönlendir):

Belki de çok sık kullanmayacağınız bir komut olmasına rağmen oldukça işlevseldir. Bu komut yardımı ile ziyaretçiyi istediğiniz sayfalara otomatik olarak yönlendirebilirsiniz. Kullanımı aşağıdaki şekildedir.

 

<%

   Response.Redirect “http://www.akkoyun.net”

%>

Örnek 132 : Sayfanın Yönlendirilmesi.

 

Bu şekildeki bir kullanımda site otomatik olarak tırnak içerisinde parametre olarak verilmiş siteye veya sayfaya yönlenecektir. Fakat unutulmaması gereken bir nokta vardır, belirtilen siteye yönlendirildiği zaman yönlendirme öncesi tanımlanan değişkenler ve oturumlar hafızadan tamamen silinir ve yeni sayfaya öyle yönlendirilir. Ve bu şekilde birbirinden bağımsız çalışan siteye yönlenir.

 

Değişkenlerinizin ve oturumlarınızın yönlendireceğiniz sayfada da geçerli olmasını istiyor iseniz o zaman server objesinin transfer metodunu incelemenizi öneririz.

1.3.   Uygulama (Application) ve Oturum (Session) Nesnesi:

ASP’nin varoluş sebeplerinden biriside CGI dillerinin yetersiz kaldığı uygulama ve oturumların başından sona izlenmesidir dersek hiçte abartmamış oluruz. ASP’nin bakış açısında sunucudaki bir siteye bağlanıldığı zaman otomatik olarak bir uygulama (application) başlatılmış demektir. Bunun yanında bağlanan her kullanıcı da oturum açmış olacaktır. Bir grup asp ve html sayfasından oluşan bir siteye toplam olarak uygulama, bu siteye bağlanan her kullanıcıya da oturum denmesinin sebebini şu şekilde açıklayabiliriz.

 

Uygulama yani application nesnesi sitenin tümüyle ilgili bilgileri yani değişken veya nesne yapılarının tamamı uygulama nesnesi dahilinde tutulmaktadır. Oturum nesnesi ise siteye bağlantı kuran ziyaretçiye özel bilgilerin tutulduğu kısım olmaktadır. Daha önceki konularımızda anlatılan Hata! Başvuru kaynağı bulunamadı.) de ayrıntılı olarak gösterilmektedir.

 

Kitabın başlarındaki değişkenler konusu iyi anlaşıldıysa her değişkenin sadece kullanıldığı sayfada geçerli olduğunu kavramış olmanız gerekmektedir. Fakat bazı uygulamalarımızda değişkenlerimizin tüm kullanıcılar için aynı olması veya bir kullanıcının tüm oturumu boyunca sabit kalması istenebilir. ASP’nin genel olarak en iyi özelliklerinden biriside budur. Örneğin sadece bağlı olan kullanıcının tüm oturumu boyunca bir değerin sabit kalmasını istediğimiz zaman

 

<%

   Session(“pi”) = 3.14159276

%>

Örnek 133 : Oturuma Özel Veri Atama.

 

Bu şekildeki bir kullanımda o kullanıcı oturumunda tüm sayfalarda bu “pi” değeri geçerli olacaktır. Ek bir bilgi vermeyi gerekli görüyorum uygulama ve oturum nesnelerinde bir değişkene değer atanacaksa yani uygulama veya oturum nesnesinden değer okutulacaksa “session” yada “application” komutu eşitliğin sağına yazılacaktır. Bunun tam tersi durumlarda yani uygulama yada oturum nesnelerine değer atamak istiyorsanız bu komutlar eşitliğin sol tarafına yazılacaktır. örneğin

 

<%

   Session(“pi”) = 3.14159276 ‘değer atama

   Pi = Session(“pi”) ‘değer alma

%>

Örnek 134 : Oturum Verisi Atama ve Alma.

Bağlı olan kullanıcıya özel değil de tüm uygulama içerisinde geçerli olan bir değişken atamak istiyorsanız uygulama nesnesini aşağıdaki gibi kullanmanız gerekecektir.

 

<%

   Application(“pi”) = 3.14159276 ‘değer atama

   Pi = Application(“pi”) ‘değer alma

%>

Örnek 135 : Uygulama Verisi Atama ve Alma.

 

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 dosyasına bir sayaç yerleştirilerek yapılır.

1.4.   Server Nesnesi:

Request nesnesi ile ASP programcıklarımıza veri girişi (gönderimi) yaptık. Response nesnesi ile programdan veri çıktısı aldık. Peki bu verilerimizi işlerken server hep sabit mi çalışacak. Tabi ki hayır. ASP’nin dinamik yapısı nedeniyle server üzerinde yapılan işlemler belirli parametrelerle tanımlanabilir. İşte bu tanımlamaları yapabilmek için server nesnesi kullanılır.

 

Unutulmaması gereken en önemli nokta server nesnesi ile request nesnesinin bir özelliği olan ServerVariables özelliğinin karıştırılmamasıdır. Servervariables özelliği sadece server ile ilgili değişkenlerin alınabileceği bir özelliktir (sadece okunabilir / readonly). Fakat server nesnesi serverın ASP programcıklarını yorumlarken kullanacağı parametreleri ayarlayabilen bir nesnedir.

 

Server nesnesinin toplam 5 adet özelliği vardır. Bunlar;

 

  1. ScriptTimeOut
  2. CreateObject
  3. MapPath
  4. HTMLEncode
  5. URLEncode
  6. Execute
  7. Transfer

1.4.1.      ScriptTimeOut

Türkçe’si “zaman aşım süresi” olan bu komut yardımıyla ASP’nin dinamik olarak oluşturduğu HTML sayfalarının maksimum oluşturulma süresi ayarlanabilir.

 

Bir ASP scriptinin dinamik olarak bir HTML sayfasını oluşturma hızı tamamen ASP içerisindeki işlem yoğunluğuna bağlıdır. Örneğin içerisinde birçok birbiri içine geçmiş döngü olan bir script tamamen saf bir scriptten çok daha yavaş işlenerek istemciye gönderilecektir.

 

Bu özellik hem okunabilir hem de yazılabilir bir özelliktir. Bu yazılabilme ve okunabilme deyimleri ileride sık sık karşımıza çıkacaktır. Bunu şu şekilde açıklayabiliriz: okunabilme özelliği bir nesnenin bir metodunu kullanırken o metoddan değer alabileceğimiz anlamına gelir. Bir örnekle açıklarsak;

 

<%

   A = Nesne(1).Metod(1)

%>

Örnek 136 : Metoddan Değer Almak.

 

Bu örnekte “A” değişkenimize “Nesne(1)” nesnesinin “Metod(1)” metodundan geri dönen değeri atadık.

 

Yazılabilme özelliği ise bir nesnenin bir metoduna değer verebilme özelliğidir. Örnekle açıklamak gerekirse;

 

<%

   Nesne(2).Metod(2) = “B”

%>

Örnek 137 : Metoda Değer Vermek.

 

Bu kullanım tarzını derslerimize ilk başladığımız sıralarda anlatmıştık. Eşitliğin sol tarafı her zaman kaynağı vermektedir. Sağ taraf ise her zaman hedefi verir. Örneğimizde “Nesne(2)” nesnesinin “Metod(2)” metoduna “B” değerini vermiş bulunuyoruz. Bu iki özelliği aynı anda da kullanabilmekteyiz. Yani bir nesne hem yazılabilir hem de okunabilir olmaktadır.

 

Bu kadar teorik bilgi verdikten sonra server nesnesinin ScriptTimeOut özelliğine geçebiliriz.

 

ScriptTimeOut özelliğini okuma amaçlı kullanırken; bu özelliğin o andaki değerinin kaç olduğunu öğrenebiliriz. Burada adı geçen değerin birimi saniyedir yani timeout olayı saniyelerle ölçülür. Okuma özelliğine örnek verecek olursak;

 

<%

   STO = Server.ScriptTimeOut

   Response.Write STO

%>

Örnek 138 : Script Derlenme Süresinin Belirlenmesi.

 

Bu kullanım şekli ile ekrana o anda ayarlı olan timeout değeri dönecektir. Örneğimizde bu değer “90” olarak bulunmuştur. Bu değer saniye cinsinden maksimum sayfa oluşturma süresini verecektir.

 

Bilgi : Timeout değeri herhangi bir ayar yapılmamış ise geçerli değer olarak 90 alacaktır.

 

ScriptTimeOut özelliğini ayarlamak ve yeni bir değer vermek istersek bunu nesnenin yazılma özelliği yardımı ile yapacağız. Örneğin;

 

<%

   Server.ScriptTimeOut = 60

%>

Örnek 139 : ScriptTimeOut Kullanımı.

 

Bu şekildeki bir kullanım ile scriptimizin timeout süresini 60 saniye olarak ayarlamış bulunuyoruz. Yani bir diğer değişle scriptimiz 60 saniye içerisinde bir HTML kodu üretemez ise server otomatik olarak işlemi sonlandırarak hata verecektir.

1.4.2.      CreateObject

Sunucuya yüklenen her component için bir PROGID (GUID) belirleyici vardır. Bu numara komponenti temsil eder. Bu numara yardımı ile component’i ASP içerisinde kullanılabilen bir nesne olarak tanımlayabiliriz. İşte bu işlem için Server nesnesinin CreateObject özelliğinden faydalanabiliriz.

 

Bizim burada anlattığımız nesnelerin dışında piyasada kullanılan ve bir çok değişik işlemi gerçekleştiren component mevcuttur. Bu componentleri ASP içerisinde direkt olarak kullanabilmemiz için ilk olarak tanımlamamız gerekir. Server CreateObject bu işlemi yapan komuttur.

 

Kullanımı oldukça basit olan bu özellik yardımı ile kendi nesnelerimizi tanımlayabilir ve kullanabiliriz. Örneğin;

 

<%

   Set Nesne = Server.CreateObject(“Akkoyun.Web”)

%>

Örnek 140 : CreateObject Yapısı.

 

Bu şekilde “Akkoyun.Web” Nesnesini “Nesne” ismi ile tanımlamış bulunuyoruz bu tanımlama işleminden sonra nesne özelliklerini yine her zamanki gibi kullanabilirsiniz. Örneğin;

 

<%

   Nesne.Metod = “ref MTSCS”

%>

Örnek 141 : Metoda Değer Atama.

 

Yukarıda CreateObject ile tanımladığımız “Nesne” isimli nesnemizin bir metodunu kullandık.

1.4.3.      MapPath:

Server nesnesinin MapPath metodunu kullanarak, dosyaların konum bilgisini scriptlerimizde kullanabiliriz. Amacı, mantıksal (sanal) yol bilgisini bir istemci tarayıcısı için kullanılabilir hale, yani sunucudaki fiziksel yola uygun hale getirmektir. Aşağıdaki örnekte olduğu gibi, root dizininden hangi sanal dizine dallanacağını  gösterilebilir.

 

<%

   ‘Sanal Dizin /Akkoyun Olsun

   Dim Fiziksel

   Fiziksel = Server.MapPath(“/Akkoyun”)

%>

Örnek 142 : MapPath Metodu.

 

“Fiziksel” değişkeni içerisindeki gerçek yol bilgisi, “c:\inetpub\wwwroot\akkoyun” olacaktır.

 

MapPath metodu sunucu üzerinde o dizinin var olup olmadığını anlayamaz.

1.4.4.      HTMLEncode:

Normal şartlar altında bir web sayfasında “<Table>” yazdırmak bir hayli zordur çünkü server bu komutu bir HTML tagı olarak yorumlar ve derlemede işletir. Halbuki biz bu tagı sunucuya göstermek istiyoruz.

 

İşte bu noktada HTMLEncode metodu devreye girer. Bu metod yardımı ile kullanıcının görmesini istediğimiz tag, komut yada özel sembolleri kullanıcıya direkt olarak gösterebiliriz. Kullanımı yine her zamanki gibi oldukça kolaydır.

 

<%

   Response.Write(Server.HTMLEncode(“<%=now%>”))

%>

Örnek 143 : HTMLEncode Metodu.

 

Yukarıdaki örnekte görüldüğü gibi kullanıcı ekranında “<%=now%>” şeklinde bir çıktı almış olacağız.

1.4.5.      URLEncode:

URLEncode metodu HTMLEncode metoduyla benzerdir. Fakat, bir bilgiyi alır ve URLEncode yapılmış hale dönüştürür. Tüm boşluklar + işareti ile değiştirilir ve diğer işaretler ise % işareti ile başlayan onaltılık düzendeki ANSI eşdeğerleri ile değiştirilirler. URLEncode metodunun amacı, kodumuzda hiperlink bağlantıları oluşturacaksak bunların doğru formatta olduğunu garantilemektir. Aşağıdaki örnekte bu özelliğin nasıl kullanıldığını görebilirsiniz.

 

<A HREF=”Test.asp?ID=

<%

   Server.URLEncode(“33%”)

%>

33% </A>

Örnek 144 : URLEncode Metodu.

 

Tablo 17 : ANSI Kod Tablosu.da ANSI standartlarında decimal değerlere karşılık gelen karakterler bulunmaktadır. Bu tablonun kullanılış biçimi şu şekildedir. Kullanacağınız karakterin bulunduğu sütundaki değer ile bulunduğu satırdaki değeri toplayarak bunu “%” işareti ile belirtmektir.

 

Örneğin;

Ò sembolünü kullanmak istiyorsanız bulunduğu sütundaki değere (160) bulunduğu satırdaki değeri (14) ekleyerek ulaşabilirsiniz (174). Bu kodu ise “0174%” şeklinde urlencoded yapabilirsiniz.

 

ANSI kodlarının toplam 4 basamaktan oluşması gerektiğini unutmayın ve değer eğer 4 basamaktan küçük ise sol tarafına 4 basamak oluncaya kadar sıfır koyunuz.

 

Bu kodları ALT+ şeklinde de kullanabilirsiniz. ALT tuşuna basılı tutarken “0033” rakamlarını kodlamanız durumunda ANSI karşılığı olan “!” sembolünü elde edersiniz.

 

 

Tablo 17 : ANSI Kod Tablosu.

1.4.6.      Execute

ASP scriptlerimiz veya HTML sayfalarımız içerisinde harici bir kod dosyasını dahil etmek gerekebilir. Bu durumlarda Include özelliğinin yetersiz kaldığı durumlarda server objesinin Execute metodu kullanılır. Bu metod sayesinde harici bir kod ya direkt olarak dosyadan çağırılarak çalıştırılır yada bir string değişkeni içerisinde saklanan script işletilebilir.

 

<%

   ‘ harici dosyanın direkt işletilmesi

   Dosya = “harici.txt”

   Server.Execute(Dosya)

 

   ‘ string değişkenin işletilmesi

   Komut = “Response.Write(‘deneme’)”

   Server.Execute(Komut)

%>

Örnek 145 : URLEncode Metodu.

 Bu şekilde bir kullanım ile hem daha dinamik hem de daha esnek siteler geliştirebilirsiniz. Dinamik içerik kullanımı ilerideki konularda ayrıntılı anlatılacaktır.

1.4.7.      Transfer

Response nesnesinin redirect metodu ile aynı işi yapan transfer metodu, redirect’in aksine yönlendirdiği sayfaya mevcut olan değişkenleri de taşır.

 

<%

   Server.Transfer(“http://www.akkoyun.net”)

%>

Örnek 146 : Sayfanın Yönlendirilmesi.

 

Yeni siteye veya asp dosyasına yönlendirme yapılmış oldu ve yönlendirme yapılan uygulamadaki tüm değişkenler ve oturumlar da yeni siteye aktarıldı.

1.5.   Global.asa

Global.asa dosyası ASP scriptleri içerir fakat normal bir ASP sayfasının aksine global.asa dosyası içerik görüntülemek için kullanılmaz. Bunun yerine global.asa dosyası global uygulama olaylarını ele almak için kullanılır. Bir diğer değişle tüm scriptlerimiz içerisinde kullanacağımız fonksiyonları yani global fonksiyonları bu dosya içine yerleştiririz. Çünkü server ASP dosyalarından önce bu dosyayı işleme sokacaktır.

 

Global.asa dosyasını kullanmadan önce bir ASP uygulaması oluşturmanız gerekir. Bu işlemi sadece PWS kullanan kullanıcılarımız yapacaktır. IIS kullanan kullanıcılar bu işlemi atlayabilirler.

 

Bu dosyanın içeriği standart bir ASP dosyasına benzemekle birlikte adındaki uzantının .asp değil de .asa olmasının sebebi, dosyanın Active server application dosyası olmasıdır.

 

Bir asp uygulaması oluşturduktan sonra global.asa dosyasını uygulamanızın ana dizinine (root) ekleyebilirsiniz. Global.asa dosyası içerisinde yine vbscript kullanacağız fakat normal vbscript komutlarına ek olarak 4 yeni komut mevcuttur.

 

Session_OnStart:

Bu olay bir ziyaretçi web sitesine girdiğinde tetiklenir. Ziyaretçi ilk sayfa talep anında bu işlem gerçekleşir.

 

Session_OnEnd :

Bu olay bir oturum sona erdiğinde tetiklenir. Bir kullanıcı oturumu zaman aşımına uğradığında yada session nesnesinin abandon metodu ile sonlandırıldığında bu olay gerçekleşir.

 

Application_OnStart:

Bu olay web sunucunuz başlatıldıktan sonra web sitenizden ilk sayfa talep edildiği zaman tetiklenir. Her zaman session_OnStart olayından önce gerçekleşir.

 

Application_OnEnd:

Bu olay sunucu kapatıldığı zaman tetiklenir ve her zaman session_OnEnd olayından sonra gerçekleşir.

 

Application ve session nesnelerinin kendi başlarına en çok kullanıldığı yer, siteye gelen ziyaretçilerin sayısını tutmasını sağlamaktır. Bu genellikle global.asa dosyasına bir sayaç yerleştirerek yapılır.

 

Global.asa dosyası içerisinde “<%” veya “%>” tagları kullanılmaz. Bunun yerine, scriptin başlangıç ve bitişi HTML “<script>” tagı ile işaretleniyor. “<script>” tagının runat özelliğine server değeri verilerek, bunun istemci tarafında değil, sunucu tarafında çalışan bir script olduğu belirtiliyor.

1.6.   Dış Kaynaklı Kod Kullanımı

Bir ASP sayfasının içine bir dosya dahil etmek için temel HTML taglarından olan “#INCLUDE” tagını kullanabilirsiniz. Bu tag hem ASP sayfalarında hem de standart HTML sayfalarında kullanılabilmektedir.

 

Dosya dahil etme işlemi iki durumda faydalıdır. İlk olarak aynı içeriği web sitenizdeki birçok sayfaya eklemeniz gerektiğinde işinize yarayacaktır.

 

Diyelim ki, web sitenizdeki her sayfanın tepesine koymak istediğiniz standart bir logonuz var. Logoyu bir başlık dosyasına yerleştirip, daha sonra bu başlık dosyasını her ASP sayfasının içine dahil edebilirsiniz.

 

Şirket logosunu bir başlık dosyasıyla görüntülemek web siteniz için tutarlı bir görünüm oluşturmayı kolaylaştırır, ayrıca ileride şirket logosu değişirse sayfalarınızda değişiklik yapmayı da daha kolay hale getirir. Bu durumda web sitenizdeki bütün sayfalarda değişiklik yapmak yerine, sadece başlık dosyasını değiştirmeniz yeterli olacaktır.

 

Dosya dahil etme işlemi ayrıca, standart bir fonksiyonlar ve prosedürler kümesini birden fazla ASP sayfasında kullanmanız gerektiğinde de çok faydalı olacaktır. Fonksiyon ve prosedürlerinizi bir kütüphane olarak tek bir dosyada toplayıp, sonra da bu dosyayı diğer ASP sayfalarına dahil edebilirsiniz. Eğer birden fazla ASP sayfasında kullanmanız gereken yeni bir fonksiyona ihtiyacınız olursa yeni fonksiyonu dahil edilen dosyaya eklemeniz yeterli olacaktır.

1.6.1.      #INCLUDE:

Bir ASP sayfasına bir dosya dahil etmek için #INCLUDE tagı kullanılır. Dahil edeceğiniz dosya web sunucunuzun erişebileceğiniz herhangi bir klasöründe bulunabilir. Tagın iki kullanım şekli bulunmaktadır. ASP sayfasına kendisi ile aynı klasörde bulunan bir dosya dahil edileceği zaman, aşağıdaki gibi kullanılır.

 

 

<!– #INCLUDE FILE=”baslik.asp” à

 

Örnek 147 : Include Kullanımı.

 

Yukarıda bulunan ASP sayfası kodun bulunduğu satırda baslik.asp isimli dosyayı dahil ediyor. Burada #INCLUDE tagının <% ve %> sembolleri arasında kullanılmadığına dikkat etmek gerekiyor.

 

Dahil edeceğiniz dosya ASP scriptleri içeren bir dosya ise, bu dosyaya dosya uzantısı olarak “.asp” vererek onları ASP dosyası haline getirmeniz iyi olur. Böylece, web sitenize giren kullanıcıların dosyanın içeriğini görmesini engellemiş olursunuz. Eğer dahil edeceğiniz dosyayı “.htm” yada “.inc” gibi bir uzantı verirseniz, herhangi bir dosyayı bir web tarayıcısında açarak dosya içeriğini (ASP kodlarını) görüntüleyebilir.

1.6.2.      Dinamik Include:

Dosya dahil ederken bir değişkenin değerine bağlı olarak farklı dosyaları dahil etmek isteyebilirsiniz. Mesela aşağıdaki kodda ASP sayfası #INCLUDE tagını kullanarak ID isimli bir değişkenin değerine bağlı olarak bir dosya görüntüleyecektir.

 

<%

   ID = “5.txt”

%>

 

<!– #INCLUDE FILE=”<%=ID%>” à

Örnek 148 : Dinamik Dosya İçermek.

 

Maalesef yukarıdaki ASP sayfası istendiği şekilde çalışmayacaktır. Problem şudur, #INCLUDE tagı da dahil olmak üzere bütün taglar, sayfadaki scriptler işlenmeden önce işlenir. Bu da demektir ki yukarıdaki örnekte bulunan #INCLUDE  tagı, ismi <%=ID%> olan bir dosyayı dahil etmeye çalışacaktır. Tabi ki buda bizim istediğimiz şey değildir.

 

Eğer bir değişkenin değerine bağlı olarak farklı dosyaları dinamik şekilde dahil etmek istiyorsanız, ya bir ya bir vbscript şartlı ifadesi (if), yada  bir vbscript select…case ifadesi kullanmanız gerekir. Aşağıdaki örnekte ID değişkeninin değerine bağlı olarak farklı dosyaları doğru şekilde içerdiği görülmektedir.

 

<%

   ID = 2

   Select Case ID

   Case 1

%>

   <!– #INCLUDE FILE=”1.asp” –>

<%

   Case 2

%>

   <!– #INCLUDE FILE=”2.asp” –>

<%

   End Select

%>

Örnek 149 : Dinamik Veri İçeriği Ekleme.

 

Burada şu husus önemli: yukarıdaki scriptteki dosyalar şartlı olarak dahil edilmiyor. #INCLUDE tagı bütün scriptlerin çalıştırılmasından önce yorumlandığı için, “Select…Case” ifadesi yorumlanmadan önce bütün sayfalar dahil edilerek tek bir büyük dosya halinde birleştiriliyor. Sonra bu büyük dosyanın sadece şartlara uyan kısmı görüntüleniyor.

 

Bu tip bir dinamik içerik eklemenin yanında birde server objesinin bir metodu olan Execute komutu vardır (2.13.6 Execute). Bu metod yardımı ile harici dosyalarda saklanmış scriptleri direkt olarak okutup çalıştırtabiliriz bu şekilde dinamik içerik sağlanmış olacaktır. Bu yöntem çoklu seçme yapılmayacak durumlarda çok kullanışlı ve performanslı olacaktır.

 

<%

   ID = “5.txt”

   Server.Execute(ID)

%>

Örnek 150 : Dinamik Dosya Çalıştırmak

 

Çok fazla dosya dahil edilerek büyük bir ASP dosyası oluşturulması problemlere yol açabilir. Problemler bir kullanıcı tarafından ilk defa bu sayfayı talep ettiğinde çıkacaktır. Web sunucunuzun sayfayı oluşturması uzun bir zaman alabilir. Sayfa değiştirilmediği yada web sunucunuz kapatılmadığı müddetçe, sonraki talepler çok daha hızlı bir şekilde karşılanabilir. Çünkü web sunucusu sayfayı ön hafızaya alacaktır.

1.7.   Aktif Sunucu Bileşenleri

Birçok yönden bu bileşenler Active-x kontrollerine benzer. Fakat, aktif sunucu bileşenleri tarayıcıya bir nesne göndermektense nesneyi sunucu üzerinde çalıştırmak için tasarlanmıştır. Bunun da, bu yazımızda göreceğimiz gibi birçok avantajı vardır.

 

Sorulması gereken bir soru da şudur: Bu bileşenler nereden geliyor? Bunların bir kısmı ASP kurulumu sırasında sağlanır.

 

Diğerleri de ya satın alınır ya da bedava bulunabilir. Bu yazıda Microsoft tarafından sağlanan birçok nesnenin aslında ne kadar çok faydalı olduğunu göstermeye çalışacağım. Bu bileşenleri kullanmaya alışırsanız başkalarının sağladığı bileşenleri de kendi sayfanızda kullanırken zorlanmazsınız.

 

Bununla birlikte standart bileşenler vardır. Biz bu bileşeni bu yazımızda ele almayacağız. Dinamik web sitesi teknolojileri kullanmanın esaslarından bir tanesi de, farklı tipteki veri tabanı yönetim sistemlerindeki bilgiyi doğrudan yayımlamaktır. Burada ihtiyaç duyulan veriyi toplamak ve bir veri tabanında saklamaktır. Bu hedefe, ASP kullanarak ulaşmak için özel fakat genel amaçlı bir bileşen olan Active-X veri nesneleri olarak bilinen bileşenin avantajlarını kullanacağız.

1.7.1.      Sunucu Bileşenleri:

VBScript ve JsScript için kullanılabilir çeşitli script geliştirme nesnelerini görmüştük, şimdi bunların diğer bileşenlerle nasıl birlikte kullanıldıklarını göreceğiz. Buradaki önemli bir nokta da, sunucu bileşenleri ve hazır script geliştirme nesnelerinden bahsederken de bunları birbirine karıştırmamaktır. TextStream ve Dictionary gibi script geliştirme nesneleri script geliştirme ortamının birer parçasıdır. Bunlar ASP sisteminin bir parçası olan bir DLL tarafından oluşturulmuştur.

 

Sunucu bileşenleri, script geliştirme dilleri DLL’lerinden farklıdır. Bunlar kendilerine ait DLL’lerin içinde oluşturulurlar. Mesela bu yazıda inceleyeceğimiz Content Linking bileşeni NextLink.DLL dosyasının içerisinde oluşturulur. Bu, sunucu üzerine kurulup kaydedildikten (register) sonra ASP’nin kurulumunda desteklediği tüm script geliştirme dilleri ile beraber kullanılabilir.

 

Göreceğiniz gibi bazı sunucu bileşenleri daha önce gördüğümüz built-in script geliştirme nesnelerinin gücünü kullanır. Bu bileşenlerin her birisine bakmadan önce genel olarak kullanacağımız sunucu bileşenlerine bakalım.

1.7.2.      Genel Bakış:

Geçtiğimiz konularda, ASP paketi tarafından sağlanan bileşenlerin kullanımının yönetimini gördük. Sunucu nesnesinin metotlarından birisini kullanarak browser capabilities bileşeninin bir kopyasını oluşturduk:

 

 

Set NT = Server.CreateObject(“MSWC.BrowserType”)

 

Örnek 151 : BrowserCapabilities Objesinin Kullanımı

 

Bu nesne NT değişkenindeki nesne için bir referans oluşturur ve biz daha sonraki scriptlerimiz içinde nesne ile çalışabiliriz. Başka bir değişle bu nesnenin özelliklerinin bize uygun olanlarını kullanır ve metotlarının gerektiği kadarını koddan çağırırız.

 

Standart bileşenlerin çoğu, web sitenizin veya şirket İntranet’inizin başarısı için belirli türdeki görevleri hedef edinmiştir. ASP kullanarak başarmak isteyeceğiniz şey kesinlikle yayımlamak istediğiniz bilginin türüne ve sitenizin genel amaçlarına bağlıdır. Hazır bir bileşeni kullanmak başlangıç için size bir yol gösterir.

1.7.3.      Bileşenleri Kullanmak:

VBScript veya JsScript ile sunucu nesnesinin CreateObject metodunu kullanabiliriz. Bunu daha önce bir bileşenin kopyasını oluştururken anlatmıştık. Yada nesne referansını doğrudan bir değişkene atayarak daha sonra kodumuzda kullanabiliriz.

1.7.4.      <Object> Kullanmak:

Başka bir yol olarak ASP’deki bir nesnenin kopyasını oluşturmak için <OBJECT> etiketini kullanabiliriz. Aynı yolla tarayıcı üzerindeki bir Web sayfasındaki bir nesnenin kopyasını da oluşturabiliriz. ASP , HTML <OBJECT> etiketi için özel bir uygulama sağlar ve biz bunu sayfamıza bir nesne yerleştirmek için kullanabiliriz. Normal bir .asp dosyası içinde bir bileşenin kopyasını veya script geliştirme nesnesini tanımlamak için şöyle bir yazılım kullanırız:

 

 

<Object Runat=Serverı ProgID=”Nesne Tanımlayıcı”></Object>

 

Örnek 152 : <Object> Kullanmak

 

Nesne Referansı, Nesne Kopyası gibi bir isimdir. Bu isimler kodumuz içinde kullanacağımız nesneleri gösterir. Nesne Referansı Windows Registry içindeki bir nesnenin veya bileşenin ismidir. Mesela MSWC. Adrotator gibi. Böylelikle Ad Rotator nesnesinin bildirimini kodumuz içerisinde aşağıdaki gibi yapabiliriz:

 

 

<Object Runat=Server ProgID=”MSWC.Adrotator”></Object>

 

Örnek 153 : <Object> Kullanımı

 

Sunucu olarak ayarlanması gereken RUNAT özelliğine dikkat edin. PROGID,[Vendor.] Component [.Version]. formunda bir bileşeni veya nesneyi tanımlayan tek (unique) bir metin dizisidir.

 

Ya da PROGID yerine nesnenin CLASSID’ sini kullanabiliriz:

 

 

<Object Runat=Server ClassID=”Cisid: OACE4881-8305-11CF-9427-444553540000”></Object>

 

Örnek 154 : ClassID Kullanımı

1.7.5.      Çalışma Alanı:

Normal bir .asp dosyası içerisinde CreateObject veya <OBJECT> etiketinin kullanılması genel olarak bir performans farkına sebep olmaz.Gerçek fark nesnenin yaratıldığı veya kopyalandığı noktadır. CreateObject metodu nesnenin kopyasını, çağırıldığı zaman oluşturur. <OBJECT> etiketi ile tanımlanan bir nesne ise kendisine ilk referans verilen noktaya kadar gerçek olarak oluşturulmaz. Bu da bize, nesnenin global.asa dosyasında tanımlanıp .asp dosyasında gerçek olarak tanımlanmadığı yerlerde, kaynak kullanımını azaltmamıza veya sunucu performansını arttırmamıza olanak verir.

 

Geçmiş sayılarda global.asa ve Session ve Application nesneleri ile karşılaşmıştık. Biz sadece bu dosya içerisinde nesnelerin kopyalarının oluşturmanın önemini anlamalıyız ve böylece bunlar Session veya Application’ da tanımlanan bir çalışma alanına sahip olurlar.

 

Bunu <OBJECT> etiketi içinde SCOPE özelliğini koyarak sağlarız:

 

 

<Object Runat=Server Scope=Session ProgID=”MSWC.Adrotator”>

</Object>

 

Örnek 155 : Scope Özelliğinin Kullanımı

 

SCOPE için geçerli değerler Session.Application veya Page’dir. Eğer <OBJECT> etiketini normal bir .asp dosyası içinde kullanırsak ya Page’i kullanmalıyız yada SCOPE özelliğini tamamen ihmal etmeliyiz. Eğer <OBJECT> etiketini global.asa içerisinde kullanırsak bir nesne oluştururuz, bu nesne ya mevcut oturumun tamamı için kullanılabilir olur yada global olarak uygulamanın tamamen dışında olur.

1.7.6.      Bileşen Metodları:

ASP içerisindeki bileşenleri kullanmamızın tüm sebebi sağladıkları ekstra işlevsellikten faydalanmaktır. Bu işlevselliğe sadece script geliştirme dillerini kullanarak erişmek ya mümkün değil yada ulaşılsa bile etkisiz veya zordur. Bir nesnenin kopyası kullanılabilir olduğu zaman onun için bir referansımız olur ve ihtiyaç duyduğumuz sonuçlara ulaşmak için onun metotlarını çağırabilir, özelliklerini kullanabiliriz. Her bileşenin kendine özgü metotları ve özellikleri vardır. Bu yüzden, bunların ne olduğunu ve her birinin sağladığı argümanların ve doğru  yazılımlarını bilmeliyiz. Mesela, Content Linking bileşeni GetNextURL adındaki bir metoda sahipken, Advertisement Rotator bileşeni de GetAdvertisement metoduna sahiptir.

 

Birçok bileşen metodu bir değer döndürür. Birçok durumda bu bizim istediğimiz bir şeydir. Mesela Content Linking bileşeninin GetNextURL metodunun döndürdüğü URL gibi. Diğerleri ise, sadece dışardan değer alırlar. Mesela User Properties bileşeninin Append metodu gibi. Ayrıca bu metodlar işlemin başarılı olup olmadığından emin olmamız için True veya False değeri döndürürler.

tuna

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir