Monday, 11 April 2011

Response nesnesi hakkında

Response nesnesi hakkında

response nesnesinin özelliklerinden biri olan buffer özelliği ile sayfanın gösterimi sırasında sayfanın tamamen işlenmeden kullanıcıya yollanmaması sağlanabilir.

Buffer : Bu özelliğinin "true" yapılması ile bilgisayara yollanacak sayfanın sunucunun sayfayı işlemesi bitene kadar yollamaması ,hafızasında saklaması sağlanır.Varsayılan değeri "False" tır.

response.buffer = true
Buffer özelliğinin true yapılmasından sonra flush,clear,end gibi metodlar kullanılabilir.Bu metodların kullanımları ve anlamları;

response.flush
Bu ifadenin kullanıldığında sunucu o ana kadar bufferda sakladığı bilgileri kullanıcının bilgisayarına yollar.

response.clear
Sunucunun o zamana kadar sakladığı bilgiler hafızadan silinir.

response.end
Bu ifade kullanıldığında ise sayfanın işlenmesi durdurulur ve o ana kadar saklanmış olan bilgiler kullanıcı bilgisayarına gönderilir.

ASP 3.0 o ile default değer "true" olan buffer özelliği ile ilgili sık karşılaşılan bir sorun redirect işleminde header hatasıdır bununla ilgili olarak http://support.microsoft.com/support/kb/articles/Q159/4/02.asp adresinden bilgi alınabilir.

Response.Buffer

Response.Buffer

Buffer (Tampon): Default değeri "true"

<% Response.Buffer = True %>

Asp kodlarının tamamının çalışması beklenir, tüm kodlar işlendikten sonra HTML sayfa toptan gösterilir.

bu degeri false yapmak için;

<% Response.Buffer = False %>

response.write

response.write

İfadesi İle .Asp Sayfası içinde istedigimiş Degişken yada Yazıların görünmesini saglaya biliriz. Örnek verecek olursak:

<% @LANGUAGE=VBScrip CODEPAGE=1254 %>
<% d=Bülent Yildiz
response.write("Bu Dersi, Editör: ")
response.write(d)
response.write "Hazırlamıştır"
%>

response.write nin kısa Yazım Biçimi ise<%=(degişken veya sabit) dir.

Response.write ASP'de çok kullanılan bir komuttur <% Response.write , yerine <%= yazarakta kullanabilirsiniz.

Örnek :

<% degisken="ASP Dersi"%>

<%= "Merhaba"%>
<%="<BR>"%>
<%="Active Server Page<br>"%>
<%="<hr>"%>
<%= (degisken) %>

response.end

response.end

Sunucu bu satırı gördügünde işlemi durdurur ve tompon hafızadaki degerleri browser'e gönderir ve sciptin çalışması durur. Örnek:

<% @LANGUAGE=VBScrip CODEPAGE=1254 %>
<%response.Buffer=true%>
<p>Bu yazıyı yazdıktan sonra response.end metodu çalıştırılmışıt o yüzden burdaki yazılardan sonrakiler gözükmeyecekler</p>
<%response.end%>
<p>Bu yazı hiçbir zaman gözükmeyecek </p>

Response.End

End (Son): Sunucu bu satırı gördügünde işlem yapmayı bırakır. Bu satırdan sonraki asp veya html kodlar icra edilmez. Ve o zamana kadar tampon hafıza ki değerleri tarayıcıya gönderir.

Örnek:

<%
Response.Write "Marhaba ASP"
Response.End
Response.Write "Hello ASP"
%>

Çıktı : Merhaba ASP , olur.

Response.Flush

Response.Flush

Flush (hemen gönder), Sunucu sayfa içinde bu ifadeye rastlarsa, bu ifadeye kadar icra edilmiş kodun sonucunu (Tompon Bellekte Tuttugu Değerleri) HTML’i tarayıcıya gönderir:

<%
response.flush
%>

Örnek:

<% @LANGUAGE=VBScrip CODEPAGE=1254 %>
<%response.Buffer=true%>
<p>Bu Satır tompon hafızata saklanan satır.</p>
<%response.Flush%>
<p>Buyazı ise Flush metodundan sonra yazılmıştır<p>

Bu işlem Çok hızlı Olacagından Bize normal bir sayfa yükleniyormuş gibi gözükür.

response.Clear

response.Clear

*Clear (Boşalt) : Sunucu Bu metodu Göresiye kadar Tompon hafızada tutdugu bütün bilgileri Siler. Yani response.end Tam tersi bir işlem yapar.

Not: Response.Buffer= false olarak ayarlı ise Run-time (çalışma zamanı) hataya sebep olur.

örnek:

<% @LANGUAGE=VBScrip CODEPAGE=1254 %>
<%response.Buffer=true%>
<p>Bu satırlar sunucunun tampon hafızasında saklanıyorlar ama bu satırlardan sonra response.Clear metodu ile silinecek ve gözükmeyecekler</p>
<% response.Clear %>

Örnek

<%
Response.Clear
%>

Response.Expires

response.Expires

Ziyaretci Sunucudan Sayfayı İstedigi Zaman, bu sayfalar Ziyaretcinin bilgisayarında geçiçi bir bellekte saklanır. Ziyaretci tekrar aynı Sayfaya geldigi zaman browser ilk önce, bu bellekte arar bulursa görüntüler. Ancak siz bunu istemeye bilrisniz veya bunun olmaması gereken bir durum vardır bunu engellemek için yani sayfanın herseferinde sunucudan gönderilmesini saglamak için

<% response.Expires=0 %>
Degeri Sıfır yaparak Geçiçi bellekte saklanmasını engelledik.
İstersek bunu Belirli bir tarihe kadar Saklanmasını saglaya biliriz. Yani İstedigimiz tarihte silinir.
<% response.ExpiresAbsolute=#May 01,2001 08:30:00# %>

Response.Expires

Expires (zaman aşamı süresi): Sayfanın Tarayıcı tarafından cache dizininde ne kadar tutulacağını dakida olarak set etmek için kullanılır.

<% Response.Expires=dakika %>

<%
Response.Expires = 60
%>

Bu değere "0" yapılırsa ( Response.Expires=0 ) sayfaya her gelişte sayfa yeniden yüklenir.

ExpiresAbsolute:Bu sürenin dakika olarak değil tarih veya saat olacak şekilde sayfanın geçerlilik süresini belirlemek için kullanılır.

<% Response.ExpiresAbsolute=#tarih# %>

şeklinde.

Süreçler

Süreçler

VBScript'te programın akış kontrolünde kullanacağınız bir diğer grup araç ise örneğin javascript veya Perl'de fonksiyon dediğimiz gruplandırılmış ve isimlendirilmiş işlem kümeleridir. Bu kümeler programın bir yerinde topluca dururlar ve programın başka bir yerinden isimleriyle çağrılırlar; veya bu kümelere isimleriyle referans yapılır.

VBScript'te bu kümelenmiş kod gruplarına Prosedür (Süreç) denir. iki türlü olur: fonksiyon (Function) ve Subroutine (sab-rutin okunur; kısaca Sub diye yazılır ve sab diye okunur). Bu iki süreç arasındaki başlıca fark, fonksiyondan kendisini çağıran komuta daima bir değer döner; Sub'dan dönmeyebilir. Sub, yapacağı işi yapar ve programın kontrolünü kendine atıf yapılan noktaya devreder. VBScript'de bir programa farklı yerlerde sık sık aynı işi yaptırıyorsak, bunu bir Sub ile yaptırırız; fakat programımıza bir değer gerekiyorsa, bu değeri bir fonksiyona hesaplattırırız. Her ikisi de kendilerine atıfta bulunan veya kendilerini göreve çağıran satırdan (komuttan, deyimden) verilebilecek değerleri kabul edebilirler.

Biraz karışık oldu; ama bunu ilerde gerçek ASP uygulamaları yazarken daha iyi anlayacağız. Şimdilik bir iki noktayı öylece öğrenmeye bakalım. Bir fonksiyonun adı, tıpkı bir değişken adı gibi, fonksiyonun ürettiği değeri tutar; ve bu değer kendisini çağıran komuta verilir. Diyelim ki, programımızın çeşitli noktalarında yazı-tura atıp, elde edilecek sonuca göre bir iş yapmak zorundayız. Bu ihtiyacın doğduğu yerde, yazı-tura komutlarını yazabiliriz. Ancak bu ortaya çok uzun bir programın çıkmasına sebep olur. Oysa yazı-tura işlemlerini bir fonksiyonda toplar ve ihtiyaç halinde sadece bu fonksiyonu çağırırsak ve fonksiyon bize o anda yazı mı geldiğini, yoksa tura mı geldiğini bildirirse, işimiz çok kolaylaşmış olur.

Böyle bir fonksiyon, yukarıdaki örnekten hareketle, şöyle olabilir:

<%
Function YaziTura
Dim ParaAt
Randomize
ParaAt = Int(Rnd * 2) + 1
if ParaAt = 1 then
YaziTura = "Yazı"
else
YaziTura = "Tura"
end if
end Function
%>

Bu fonksiyonu, ASP programının herhangi bir yerinden, şöyle bir yöntemle çağırabilir; ve vereceği sonucu programın akışına uygun şekilde kullanabilirsiniz:

<%
NeGeldi = YaziTura
response.write NeGeldi
%>

Fonksiyonun sonunda end Function ifadesinin bulunduğuna ve fonksiyonun elde ettiği sonucu kendi adına atadığımıza dikkat edin. DIM ifadesiyle böyle bir değişken tanımlamadığımız halde VBScript, fonksiyonu çağırdığınız anda bunu kendiliğinden yapacaktır.

Aynı işlemi Subroutine (Sub) olarak yazabiliriz. Fakat bu kez Sub, elde edeceği değeri kendisi kullanacak ve bittiği anda kontrol programa geri dönecektir:

<%
Sub YaziTura()
Dim ParaAt
Randomize
ParaAt = Int(Rnd * 2) + 1
if ParaAt = 1 then
response.write "Yazı"
else
response.write "Tura"
end if
end Sub
%>

Fonksiyon adlarının sonuna, bizden beklediği değer varsa onları belirleyen değişken adlarını parantez içinde yazarız. Fonksiyon bizden bir değer beklemiyorsa açılan kapanan (boş) parantezlere ihtiyaç yoktur. ancak bir çok VBScript programcısı bunu adet edinmiştir. Sub'ların çağrılması, fonksiyondan farklıdır. Sub'ın icra edilmesini istediğiniz noktaya sadece adını yazarız. Sub'lar işleyebilmek için bizden değer bekliyorsa, bu değerleri Sub adının yanına, parantez içine almadan ve virgülle ayırarak, yazarız. Örneğin, Hesapla isimli ve bizden iki değer bekleyen bir Sub şöyle çağrılır:

Hesapla 10, 20

Bu Sub işini bitirdiği anda programın akışı, Sub'a atıf yaptığımız noktada devam eder.

Select Case

Select Case

Select Case(Durum Seç) bir kontrol komutudur. VbScript’ten yadigar çok kullanışlıdır. Bir çok durumun içinden seçim yaparak bir işlem gerçekleştirir. Kullanışı;

Durum Seç (Durumların listesi veya durumları belirten bir değişken)
Durum 1 : Yapılacak işler
Durum 2: Yapılacak işler
Durum 3: Yapılacak işler
Durum n: Yapılacak işler
Seçmeyi Bitir

Şeklindedir. Bir örnek uygulama yapalım.

SELECT CASE Request.QueryString(“Renk”) ‘ Kullanıcının seçtiği renk
CASE “Kırmızı” ‘ Kırmısı ise
response.write “<body bgcolor=’red’>” ‘ Arkaplan kırmızı olsun
CASE “Mavi” ‘ Mavi ise
response.write “<body bgcolor=’blue’>” ‘ Arkaplan Mavi olsun
CASE “Siyah” ‘Siyah ise
response.write “<body bgcolor=’#000000’>” ‘ Arkaplan Siyah olsun
CASE “Yeşil” ‘ Yeşilse
response.write “<body bgcolor=’Green’>” ‘ Arkaplan yeşil olsun
CASE ELSE ‘ Aksi taktirde
response.write “<body bgcolor=’#FFFFFF’>” ‘Arkaplan beyaz olsun
END SELECT ‘ Bitir

Şimdide başka bir örnek;

Select Case Hour(Now)
Case 0,1,2,3,4,5,6,7,8,9,10,11
response.write "Günaydın!"
Case 12,13,14,15,16,17
response.write "Tünaydın"
Case else
response.write "İyi Akşamlar!"
end Select

Bu uygulamada ise saatine göre mesaj yazıyoruz.

Select' i Anlayalım

Select' i Anlayalım

SELECT, Komutu tanımlar başlatır ve komutun döndürmesi gereken alanları tanımlar. Bir SELECT bildirisi için bagımsız degişkenler aşağıdaki gibi kotlanır.

* SELCET Yazdıktan sonra, Sonuç kümesinde görünmesini istedeğiniz alanları belirleyin. Birden fazla alanı virgülle ayırın ve görünmelerini istediginiz sırayla düzenleyin.
* Aynı alan birden fazla tabloda görünüyorsa, Tabloadı.alanadı olarak belirleyebilirsiniz
* Bir tablodaki tüm alan adlarını eklemek için yıldız yarakreini kullana bilirsiniz mesela uyeler.* Gibi.
* Bir tablo adı veya alan adında boşluk ya da özel karakter varsa; Köşeli parantez içine alın uyeler. [ad] gibi

 

Döngüyü durdurmak

Döngüyü durdurmak

Bir döngüden belirlediğiniz koşul gerçekleşsin-gerçekleşmesin çıkmanız gerekebilir. Bunu bir başka değişkendeki değişiklik zorunlu kılabilir. Bir döngüden çıkmak için Exit (çık) ifadesini kullanabilirsiniz. Bu ifade, döngünün yaptığı işler arasında, genellikle bir if deyimi ile birlikte yer alır. Örneğin:

For sayac = 1 to 10
[..bir takım işler yap..]
if Degisken1 > Degisken 2 then Exit For
[..bir takım işlere devam et..]
next

Bu durumda For..next döngüsü, Degisken1'in değerinin Degisken2'den yüksek olduğunu belirlerse, derhal döngüyü durdurarak, next'ten sonraki satıra gidecektir. Do döngüsünden ise Exit Do ile çıkabiliriz. Bu ifadenin kullanımı da Exit For gibi olur.

For-Each

For-Each

For..next gibi çalışan bu özel döngü, sayaç değeri kullanmaz, fakat bir dizi değişkenin bütün değerleri için bir kere icra edilir. Dizi-değişkenler, VBScript ile yapacağımız işlemlerde önemli bir yer tutar. Örneğin bir sınıftaki öğrencilerin veya müşterilerimizin listesi bir dizi değişkenin elemanları olabilirler. Yapmak istediğimiz işlem, dizi-değişkenin bütün elemanları için tekrar edilecekse, For Each..next döngüsü daha elverişli olabilir. Bir dizi-değişkenin eleman sayısı ilerde değişirse ve siz döngüyü For..next ile kurmuşsanız döngünün sayacı için verdiğiniz için alt ve üst sınırı değiştirmek zorunda kalırsınız. Oysa For Each, kaç kere tekrar edeceğine ilişkin değeri her zaman dizi-değişkenin elemanların sayısından alır. Örneğin, bütün öğrencilerin listesini tutan Ögrenciler dizi-değişkeninin bütün elemanlarının değerini ekrana yazdıralım:

For Each Ogrenci In Ogrenciler
response.write Ogrenci
next

Burada "Ogrenci" Ogrenciler dizi-değişkeninde döngünün her adımında okunan bir elemanın değerini tutar. For Each döngüsü tarafından "okunmakta olan" dizi-değişkenin her bir değeri sırayla bu değişkene yazılacaktır. Bunu bir tür endeks değişken olarak düşünebilirsiniz.

If-Then-Else

If-Then-Else

if bir denetim mekanizmasıdır. Sınama söz konusudur. Mesela bir değişkenin değerini sınayabiliriz. Select Case’e benzer ya da Select Case ona benzer. Kullanımı;

Degisken1 = “Can HANHAN”

if Degisken1 = “Ozan ÖNDER” then
response.write “Ozan ÖNDER”
elseif Degisken1 = “Cihan BAL” then
response.write “Cihan BAL”
else
response.write “Can HANHAN”
end if

Gördüğünüz gibi if ile başladık ve end if ile bitirdik. Şimdi biraz inceleyelim. Degisken1’de Can HANHAN yazıyor. Bunagöre şöyle yorumlayabiliriz;

Eğer Degisken1 = “Ozan ÖNDER” ise
response.write “Ozan ÖNDER”
Eğer Degisken1 = “Cihan Bal” ise
response.write “Cihan Bal”
AksiTakdirde
response.write “Can HANHAN”
Eğer Bitti.

İstediğimiz kadar elseif kullanabiliriz. if içinde if de kullanabiliriz. Ama dışardakini kapatmadan içeriyi bitirmeliyiz. Yoksa işler karışır. Bu yüzden ileride görüceğimiz Sub veya Function yapısını kullanacağız.