ASP

Vikikitap, açık-kaynak kitap derlemeleri

Git ve: kullan, ara

Konu başlıkları

[değiştir] ASP Nedir?

ASP Microsoft tarafından geliştirilmiş sunucu tabanlı bir web programlama teknolojisidir. Açılımı Active Server Pages yani Aktif Sunucu Sayfaları'dır. Bir çok kişi ASP'yi bir web programlama dili sanır. Ancak ASP bir web programlama dili değil, kullanımı sırasında farklı programlama dillerinin kullanılabildiği bir web teknolojisidir.

ASP tabanlı web sayfaları hazırlanırken iki farklı programlama dilinden herhangi birisi kullanılabilir. Bunlar JavaScript ve VBScript'dir. VBScript JavaScript'e göre daha basit bir sözdizimine sahiptir. Biz bu kitaptaki uygulamalarda VBScript'i kullanacağız.


[değiştir] ASP GİRİŞ

ASP yani Active Server Pages Microsoft firması tarafından klasik HTML sayfalarına dinamik bir yapı kazandırmak amacıyla ortaya çıkarılmış bir programlama dilidir. Internet yeni bir teknoloji olduğundan insanlar hayal gücü sınırlarını bu yeni teknoloji ile zorlamaktadırlar. ASP de bu yeni teknolojinin yeni bir parçası olmuştur. ASP ile web sayfalarınızı dinamik hale getirebilirsiniz, bunu yapmak için ASP sunucu(server) tarafında sizin yazmış olduğunuz kodları çalıştırır ve istemci(client) tarafına ona özel görüntülenmesini istediğiniz sayfayı görür. Şimdi ilk başlangıç için karışık görünebilir bu yüzden isterseniz web progracılığından biraz bahsedeyim. Web programcılığı, W3C tarafından standart haline getirilen HTML(Hiper Metin Anlamlandırma Dili) ile start almış ve CGI, JavaScript, ASP, VRML gibi dillerle devam etmiştir. Şimdi bu dillerin farkı şudur; bu dillerin bazıları sunucu tarafında bazıları ise istemci tarafında çalışmaktadır. İlk olarak HTML’i ele alalım; HTML dosyarınının içeriğini hepimiz biliyoruz. Bu içerik bağlandığınız sunucu tarafıdan bilgisayarınıza yollanır ve sizde bulunan web görüntüleyici(Internet Explorer, Netscape gibi.) tarafından size sayfa anlamdırılarak gösterilir. Yani tüm görüntüleme işlemini sizin bilgisayarınız yapar. HTML’den sonra çıkan Javascript teknolojisi de buna yakındır. Yani dosyalar bağlandığınız bilgisayar tarafından size yollanır ve siz onları bilgisayarınızda düzenleyip görüntülersiniz. Dikkat ettiyseniz javascript(js) içeren sayfalar diğer sayfalara göre daha geç yüklenmektedir, çünkü tüm o js kodları sizin bilgisayarınızda çalıştırılır ve tabi bu da performans kaybına yol açar. ASP ise tamamen İstemci Tarafında (server side) çalışan bir programlama dilidir. Tüm kodlar sunucu tarafında çalıştırılır ve size sadece HTML kodları gönderilir. Böylece performans olarak büyük bir avantaj elde edilmiş olur, tabi bu web sunuculuğu yapacak bilgisayarınızın hızlı olmasına da bağlıdır. Örnek olarak OSYM’yi düşünün sizden aldığı bir ösym numarası ile orada bir program çalıştırır ve bu program size sadece girmiş olduğunuz numaraya ait sonucu bir html dökümanı olarak döndürür. Sunucu taraflı programlamanın diğer bir avantajı ise güvenliktir. Örneğin js kodları Kaynağı görüntüle dediğinizde görülebilmektedir. Eğer siz güvenlik açısından kullanıcıların görmemesini istediğiniz bir program çalıştırıyorsanız sunucu tarafı programlama yapmalısınız. Bu tip programlamanın ilk örneği CGI ile gerçekleşmiştir. Perl dili kullanılarak üretilen bu kodlar pekçok kişi tarafından rahatça kullanılamamıştır çünkü CGI çalıştırmak için hosting yaptığınız yerde bu desteğin verilmesi gerekmektedir. Fakat asıl en büyük sorun bu kodları geliştiriken sizin hiçbir şekilde deneyememiz olmuştur. Çalıştığından emin olmak için programı sunucuya yüklemeniz gerekmektedir. Şimdi bahsedeceğim diğer bir özellik de ASP geliştirmede kullanılan diller. En yaygın olarak kullanılan script dili VBScript’tir. Hepimiz ilk programcılık günlerimizi herhalde qbasic kodu yazarak geçirmişizdir. VBScript de temel itibariyle Visual Basic dilini kullanarak program üretmemize yarar. Bunun yanında JavaScript de kullanılabilir, fakat günümüzde js’yi kullanarak program geliştirmemizi sağlayan yeni bir dil JSP(Java Server Pages) bulunmaktadır.



[değiştir] Kurulum

Bilgisayarımızda ASP sayfalarını çalıştırabilmek için IIS veya PWS yüklü olmalıdır. Biz şimdi IIS kurulumunu anlatacağız. PWS kurulumu da pek farklı değildir.

  1. Windows kurulum CD'nizi bilgisayarınıza takın.
  2. Başlat->Denetim Masası->Program Ekle&Kaldır yönergesini izleyin.
  3. Açılan pencerenin sol kısmındaki Windows Bileşenlerini Ekle&Kaldır seçeneğine tıklayın.
  4. Ekrana gelecek listede Internet Information Services (IIS)'i seçili hale getirin ve İleri tuşuna basarak yönergeleri izleyin.

Kurulum sonunda işletim sistemizin kurulu olduğu sürücüde (genellikle C:) Inetpub klasörünün oluştuğunu göreceksiniz. ASP sayfalarınızı Inetpub\wwwroot klasörü içine kaydetmelisiniz.

[değiştir] İlk Uygulamamız (Merhaba Dünya)

Geleneğe sadık kalarak ilk olarak sayfaya 'Merhaba Dünya' yazacak bir ASP sayfası yapıyoruz. Aşağıdaki kodları Inetpub\wwwroot klasörü altına default.asp olarak kaydedin. Üzerine çift tıkladığında çalışmaz. Çalıştırmak için tarayıcınızı açın ve adres çubuğuna http://localhost yazın. Eğer IIS'i sorunsuz bir biçimde kurduysanız ekranda Merhaba Dünya! yazısıyla karşılaşacaksınız.

<%
Response.Write("Merhaba Dünya!")
%>

ASP kodları <% ve %> etiketleri arasına yazılır. Response ASP'nin bir nesnesi olup ziyaretçiye sunucudan çıktılar gönderme işlevini görür. Ekrana herhangi bir şey yazdırmak için Response nesnesinin Write metodu kullanılır. Yani Write metoduda ekrana yazdırma işlevini görür.

NOT:

ASP'de ve bir çok nesne yönelimli dilde Nesne.Metot şeklinde yazım görülür. Yani kullanılacak nesnenin isminden sonra . koyulur ve o nesnenin sahip olduğu kullanılacak metot ismi yazılır.

Write metodundan sonra ekranda gözükmesini istediğimiz yazıyı " " içine aldık. " " içinde yazdığımız yazı sayfada aynen görüntülenir ve String değeri taşır. Eğer ekranda önceden tanımladığımız bir değişkeni göstermek isteseydik " " (çift tırnak) kullanmayacaktık.

<%
degisken = 1990
%>
.
.
.
<%
Response.Write (degisken)
%>

Yukarıdaki örnekte tanımladığımız bir değişkeni ekrana yazdırmak istediğimizden çift tırnak kullanmadık. Eğer degisken ifadesini çift tırnak içine alırsak ekranda 1990 yerine degisken yazdığını görürüz. Bu degisken ifadesinin çift tırnak içinde String (dize) olarak algılanmasından kaynaklanır.

ASP'de her ekrana yazı yazdırmak istediğimizde Response.Write nesne ve metodunu yazmaya gerek yoktur. Bunun daha kısayolu vardır. Response.Write yerine = yazarsak aynı şeyin gerçekleştiğini görebiliriz.

<%
degisken = 1990
%>
.
.
.
<%
=(degisken)
%>

[değiştir] ASP Nesnelerini tanıyalım

ASP nin kullanılmasında esas etken, kullanıcıdan gelen veriyi (form elemanları, cookie, url vs.) kolaylıkla alabilmemiz ve sunucuda bulunan bir bilgiyi (veritabanı, metin dosyası, xml, hatta sunucunun kendi bilgilerini tutan Active Directory) kullanıcıya bizim belirlediğimiz şartlarda gösterebilmemizdir.

[değiştir] Request

Request nesnesi ile kullanıcıdan gelen herhangi bir veriyi kolaylıkla alabiliriz. İki çeşit veri alma şekli yaygın olarak tercih edilmektedir. Form ve QueryString. Sadece Request("deger") yazarak her iki şekilde gelen veriyi de alabiliriz. Örnek :

ornek.asp


<html>
<head><title>Falan neyi getiriyor : <%=Request("falan")%></title></head>
<body>
<h1>Bu form veriyi POST metodu ile gönderir.</h1>
<%If Len(Request("filan") & "")>0 Then%>
  <h1>Hey! daha önceden gönderilmiş değeri : <%=Request("filan")%>
<%End If%>
<form method="post">
<input type="text" name="filan"/>
<input type="submit"/>
</form>
</body>
</html>


[değiştir] Response

Response nesnesi ile sayfaya hüküm ederiz.ekrana yazı yazma durdurma tamponlama charsetler ... kullanabildigimiz kadar response neslerini bir örnekte toplayalım.

responsenesnesi.asp

<%

response.buffer = false ' Buffer özelliği response ile oluşturulan Html Data akışının html dosya oluşturulması tamamlandıktan sonra veya her satır iletildiğinde gösterilmesi ile ilgili bir özelliktir. Default değeri "on" dur bu değeri biz false yaptık


'response.clear

'metodu buffer (tampon) edilmiş tüm html bilgisinin silinmesi için kullanılır. Kullanımı: Response.clear şeklindedir. Fakat unutulmaması gereken nokta eğer Response.Buffer= false olarak set edilmiş ise Run-time (çalışma zamanı ) hataya neden olur. 'bu yuzden bu örnegimizde response.clear kodunun başına ' tırnak işareti koyduk


Response.Expires=0

'Expires özelliği dakika cinsinden sayfanın browser tarafından hafızada ne kadar tutulacağı ile ilgili bilgiyi set etmek için kuyllanılır. Eğer kullanıcı aynı sayfaya Response.Expires ile belirlenen zamandan daha önce geri dönerse sayfanın hafızadaki versiyonu kullanıcıya gösterilir. '0 yaptıgımız için her yenilendiginde sunucu kodları yeniden yorumlucaktır eğer 1 yapsaydık 1 dk sonra bellekten silinecektir


Response.ExpiresAbsolute=#01.01.2009#

'ExpiresAbsolute tıpkı Expire özelliğibne benzer olarak fakat belirtilen sürenin dakika değil tarih veya saat olacak şekilde set edilmesi suretiyle sayfanın geçerlilik süresinin belirlenmesi için kullanılır. bu kodda yıl başından sonra sayfa bellekten silinecektir(tabii o gune kadar browser kapatılmassa :)



response.end

'bu kodu yazdıgımızda bu yazının usttundeki herkodu yorumlucak ama alttaki kodları browser yorumlamayacaktır. 'bir nevi tamponlamadır


response.redirect "sayfa.asp"

'redirect i gördügü an yorumlayacı sayfa.asp ye gidicektir buda sayfanın nerdeyse görünmemsine neden olucaktır 'yani basit olarak yönelndirmedir 'fakat response.end kullandıgımızdan işlemeyecektir


response.write "response.write nesnesini kullandık"


'response nesneleri bu kadar değil execute ve transver charset fln da var fakat onları daha sonra yazacagım


%>


[değiştir] Dizi Değişkenler (Array fonksiyonu)

Dizi Değişkenler (Array fonksiyonu)

VBScript dili kullanılmaya hazır bir çok fonksiyon içerir. Bunlardan biri olan Array ile, kolayca dizi değişken oluşturabiliriz. Diyelim ki, Aylar(12) dizi-değişkenini yıl içerisindeki ayların adları ile doldurarak oluşturmak istiyoruz:

<% Dim Aylar = Array (“Ocak” , “Şubat” , “Mart” , “Nisan” , “Mayıs” , “Haziran”, “Temmuz” , “Ağustos” , “Eylül” , “Ekim” , “Kasım” , “Aralık” ) %> şeklindeki satırlar ile hem dizi-değişkeni oluşturabiliriz; hem de değerlerini atayabiliriz. Bu yapıda oluşturduğumuz dizi değişkenin üyelerini daha sonra sıra numaraları ile çağırabilirsiniz. Örneğin:

<%=Aylar(3)%>

bize Nisan’ı verir. Neden? Çünkü hayatlarının büyük bölümünü bilgisayar başında ve havasız ortamlarda geçiren, çoğunlukla asosyal kişiler olan dil tasarımcıları, sayı saymaya biz normal insanlar gibi 1’den değil 0’dan başlarlar. Dolayısıyla, Aylar dizi-değişkeni Aylar(0)’dan başlar!

Burada aklınıza şu soru gelebilir: Dizi değişken oluşturacağımıza, neden “ogrenci1”, “ogrenci2”, “ogrenci3” ya da “Gunler1”, “Gunler2” diye değişkenler oluşturmuyoruz ve bunlara değerler atamıyoruz? Her şeyden önemlisi dizi değişkenlerde bir değişkene numarasıyla atıfta bulunabilirsiniz. Numara yerine bir başka değişkeni kullanabilirsiniz. Örneğin, OgrenciNo değişkeninizin değeri 12 ise

<% .... If Ogrenciler(OgrenciNo) = “Selim” ... %>

şeklinde bir döngü ile aradığınız öğrencinin Selim olup olmadığını sınayabiliriz. Başka programlama dillerine özellikle Visual Basic’e âşinâ olanların aklına şöyle bir soru gelebilir: “VBScript’te değişkenin metin mi, sayı mı olduğunu ayırt etmiyor muyuz?” Başka programlama dillerinde bir değişkenin değeri harf ve rakamlardan oluşuyorsa, yani matematik işlem yapmaya elverişli değilse bunlara String (Alfanümerik, karakter değerler, dizgi) denir. Programlama dillerinde bir de matematik işlem yapmaya elverişli değişken türü vardır: Sayı (Number). VBScript, bir değişkene alfanümerik (karakter, metin) olarak atadığınız değeri çift tırnak içine almanızı ister. Sözgelimi Kediler(12) değişkeni için Minnoş değerini atamak istiyorsunuz. Minnoş kelimesini çift tırnak içine almak zorundasınız. Sayı olarak kullanacağınız değerleri ise tırnak içine almazsınız. (Sayı olarak kullanacağınız değerlerin sadece rakam olabileceğini hepimiz biliyoruz!) Fakat, işleri karıştıran nokta, VBScript açısından değişken türü diye bir şey olmamasıdır. Visual Basic, küçültülüp script dili haline getirilirken, değişken türü özelliği alınmayınca, ortaya işleri karıştıran (belki de oldukça kolaylaştıran) böyle bir durum çıkmış bulunuyor. Karışıklık, çift tırnak içinde verdiğiniz bir değeri matematik işlemde kullanmaya kalktığınızda karşınıza çıkabilir. Rakam olmayan bir karakter dizisini bir değişkene tırnaksız olarak atadığınızda VBScript “tanımsız değişken” vermeye kalktığınızı söyleyerek duracaktır. VBScript’in bu eksikliğini gidermek için bazı ASP programcıları değişken adlarının önüne karakter dizileri için “str” harflerini koyarlar: strAy, strOgrenciler, strMailAdresi gibi. İsterseniz, VBScript’in karakter-dizisi ve sayı değişkenleri nasıl ayırt ettiğini veya etmediğini bir kaç örnekle görelim. Şu kodu yazarak, çalıştıralım:

<% Option Explicit %> <HTML> <% Dim Degisken(2), Toplam Degisken(1) = "Mustafa" Degisken(2) = "Doğan" Toplam = degisken(1) + Degisken(2) %> <% =Toplam %> </HTML>

Sonuç: “MustafaDoğan” değil mi? (Arada boşluk olmamasını şimdilik önemsemeyelim.) Peki; şimdi Degisken(1) değeri olarak tırnak içine alarak 5, Degisken(2) değeri olarak yine tırnak içinde 10 yazın. Programı tekrar çalıştırın. Haydaa! Sonuç 510? Peki, tırnakları kaldırın. Sonuç? 15. Ne o? Bu dili tasarlayanların matematik bilmediklerini mi sandınız :) Bu durum VBScript’in matematik bilgisinin kıtlığından değil, tırnak içindeki değerlerin, VBScript ayrım yapmıyor olsa bile, karakter dizgisi (string) iken toplama işleminde art arda eklenmesinden (concatenate) kaynaklanıyor. Tırnakları kaldırdığınızda, VBScript bu değerlerin sayı olduğunu anladı ve doğru işlemi, yani toplama işlemini yaptı. Şimdi VBScript’in değişkenleri ele alış tarzını daha iyi kavramak için Degisken(1) değeri olarak tırnak işareti koymadan kendi adınızı, Degisken(2) değeri olarak da soyadınızı yazın ve programı çalıştırın. Ne sonuç aldınız? VBScript’in kullandığı tek tür değişkene variant denir. Variant, karakter-dizini (String) de olabilir, sayı (Number) da. Fakat bir variant’ın içindeki değer, veri olarak nitelendiğinde şu türlerden birine girer:

Boolean Değişkenin değeri ya True (doğru) ya da False (yanlış) olur; True’nun değeri –1, False’un değeri ise 0’dır. Byte 0 ile 255 arasında bir sayısal değer olabilir. Double Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 4.9E-324 ile 1.8E308 arasında, negatif sayılarda -4.9E-324 ile -1.8E308 arasında bir değer alabilir. Date/Time Önceden belirlenmiş biçimlerde tarih ve zaman bilgisi içerir. Empty Tanımlanmış ancak henüz değer atanmamış (boş) değişken türüdür. Error Programın hata mesajlarını ve hata değerlerini tutar. Integer Noktalık bölüm içermeyen tamsayı verilerdir; değeri -32.768 ile +32.767 arasında olabilir. Long Noktalık bölüm içermeyen tamsayı verilerdir; değeri -2.147.483.648 ile 2.147.483.648 arasında olabilir. Null İçinde veri bulunmamak üzere tanımlanmış değişkenlerdir. Object Windows OLE Nesnelerini tutmak üzere tanımlanmış değişkenlerdir. Single Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 1.4E-45 ile 3.4E38 arasında, negatif sayılarda –1.4E-45 ile -3.4E38 arasında bir değer alabilir. String Alfanumerik veri tutan değişkenlerin değeridir


[değiştir] Değişkenlere nispet, Değişmeyenler

Diyelim ki, bütün kodunuz boyunca kullanacağınız bir değişmez değeriniz var. Bu tip sabit bir değer. Bütün ASP sayfası boyunca (hatta isterseniz, bütün site, yani uygulama boyunca) değişmeden kalır. Bu değerleri Const (constant, sabit kelimesinden türetilme) komutuyla belirtiriz:

Const dolarBirimFiyat = 677000 Const KarsilamaMetni = “WELCOME...Web sitemize hoş geldiniz.” Const UreticiFirma = “Sony Electronic”

[değiştir] VBScript’te İşlemciler (Operatörler)

Bilgisayar operatörü ile program operatörü arasında fazla bir fark yoktur. Her ikisi de verdiğiniz değerleri ya karşılaştırır bir sonuç bulurlar; ya da bu değerlerle aritmetik işler yapar ve bir sonuç ortaya çıkartırlar. Bilgisayar operatörü daha sonra bu iş için sizden para ister; program operatörü istemez. (Bilgisayarı edinebilmek için Türkiye şartlarında yeterince harcama yapıyorsunuz zaten!) VBScript’in operatörleri ve yaptıkları işler şöyle sıralanır:


Operatör: İşlev: Sınıfı:

+ Toplama Aritmetik - Çıkartma

  • Çarpma

/ Bölme ^ Üssünü alma \ Tamsayı bölme Mod Modüler aritmetik = Bir değişkenin diğerine eşit olduğunu sınar Karşılaştırma <> Bir değişkenin diğerine eşit olmadığını sınar >and< Bir değişkenin diğerinden büyük veya küçük olduğunu sınar (and kelimesi var) >= and <= Bir değişkenin diğerinden büyük veya eşit, veya küçük veya eşit olduğunu sınar (and kelimesi var) Is Bir ifadedeki iki referansın aynı Nesne’ye yapılıp yapılmadığını sınar And Bir veya daha fazla değişkeni test olarak karşılaştırır Mantıksal Or Bir işlemin devamı için hangi koşulun oluşması gerektiğini sınar Not Bir ifadeyi negatif hale getirir XoR Sadece bir şartın doğru olup olmadığını sınar Eqv İki değişkenin eşitliğini sınar Imp İki ifadede mantıksal implikasyon işlemi yapar.

VBScript ile yazacağımız ASP sayfalarında bu işlemcileri beklediğimiz sonucu verebilmesi için kullanım sıraları önemlidir. Bunu bir örnekle açıklayalım: 100’den 6’yı çıkarmak ve sonucu 2’ye bölmek istiyorsunuz; sonuç 47 olacaktır. Yani, 100-6/2; değil mi? Bu işlemin VBScript’teki sonucu 97 olacaktır. Çünkü, VBScript önce 6’yı 2’ye bölecek ve elde ettiği sonucu 100’den çıkartacaktır. VBScript’te, aritmetik işlemlerin yapılma sırası şöyledir:

Operatör: İşlev: Öncelik: + Toplama 3 - Çıkartma 3

  • Çarpma 2

/ Bölme 2 ^ Üssünü alma 1

VBScript ile hesap işlemi yaparken, aritmetik işlem sırasını karıştırarak hatalı sonuç almamak için sık sık parantez kullanmak yerinde olur. Yukarıdaki örnek şöyle yazılabilirdi: (100-6)/2. Tabiî amacınız 100’ü 6/2’ye bölmek ise bu işlemi şöyle yazmalısınız: 100-(6/2).


Kaynaklar :lodos2005, Forumvizyon.net , MSDN, 4guysfromrolla.com, Devguru dökümanları. (Kaynakları daha sonradan link verip uygun bir yere alacağım.)

"http://tr.wikibooks.org/wiki/ASP" adresinden alındı.