Bu hafta, JSP ile dinamik etkileşimli bir web
sayfası oluşturmak için kendimi bayağı bir hırpaladım. Sorunlar, JSP olarak
yazdığım örnek sayfaları, servlet' leri çalıştırmak için kullandığım JSWDK
kitinde baş gösterdi. Nedense hiç bir JSP sayfasını çalıştıramadım. Evin içinde
bir o köşeye bir bu köşeye koşuştururken nerde hata yaptığımı bulmaya
çalışıyordum. Sorun büyük bir ihtimalle benim sistemimden kaynaklanıyordu.
Tabiki benimde yaptığım yanlış ayarlamalar olabilirdi. Sonuda kurcalaya
kurcalaya güzelim JSWDK kitinide bozuvermiştim.
Ne yapabilirim diye düşünürken, aklıma parlak bir
fikir geldi. Elimdeki kaynaklar JSP uygulamalarına ufak bir dokunuş yapmıştı.
Ancak bu konuda esaslı bir kaynağım olması gerektiği inancındaydım. Her ne kadar
amacım mimarinin temellerini ve çalışma sistemini anlayıp çok basit bir uygulama
geliştirmek olsada, yinede elimin altında her zaman başvurabileceğim bir kaynak
olması gerektiğini düşünüyordum. Bu düşünceler ile hemen yola koyuldum ve
Kadıköy' deki kitapçıları gezmeye başladım. Sonunda aradığım kitabı bulmuştum.
Pusula yayınlarından Numan Pekgöz' ün JSP isimli kitabı.

İşin güzel yanı, kitapta JSP sayfalarını kurup
çalıştırabileceğim uygulamaların yer aldığı bir CD' de mevcuttu. Büyük bir
heyecan ile kiabı aldım ve yol boyunca otobüste okuyarak geldim. Eve geldiğimde,
JSP sayfalarını çalıştırabileceğim JRun sunucusunun nasıl kurulacağını ve
kullanılacağını çoktan öğrenmiştim bile. Hemen kitapta bahsedilen adımları,
birer birer işlemeye başladım. JRun, şu anda Macromedia firmasına ait olan bir
ürün olmakla birlikte kitabın bu sürümünde bir önceki verisyonuna yer verilmiş.
Ama hiç önemli değil. Sonuçta JSP sayfaları çalışıyor. Kurulumu bitirdiğimde,
| D:\Program Files\Allaire\JRun\
|
dizinine, java web sunucum kurulmuş, hazır ve
nazırdı. Artık geliştirmek istediğim JSP sayfalarını
| D:\Program
Files\Allaire\JRun\servers\default\default-app\ |
klasörü altına atacaktım. Tabi kurulum basit
olmasına rağmen yinede sistemde yapılması gereken ince ayarlamalarda vardı.
Bunlarda birisi her zamanki gibi meşhur ClassPath tanımlamaları ile ilgiliydi.
JSP sayfalarının başarılı bir şekilde işlenebilmesini sağlamak için,
| D:\Program
Files\Allaire\JRun\lib\ext\servlet.jar |
adresindeki servlet.jar paketinin Classpath
tanımına eklenmesi gerekiyordu. Bu işlemin ardından hemen ilk olarak aşağıdaki
gibi basit bir sayfa oluşturdum ve bu sayfayı jsp uzantısı ile, D:\Program
Files\Allaire\JRun\servers\default\default-app klasörü altına kaydettim.
<html>
<head>
<title>ilk jsp</title>
<body>
<%
String adim="Burak";
out.println(adim);
%>
</body>
</html> |

Şimdi tek yapmam gereken, tarayıcı penceresinde,
http://localhost:8100/ilk.jsp adres satırını girmekti. Bende öyle yaptım.

Şaka maka, ilk JSP sayfamı yazmıştım. Evet herşey
iyidi hoştu ama, bu JSP nedemekti? Ne işe yarıyordu? Herşeyden önemlisi çalışma
sistemi neydi? JSP ile ilgili tüm kaynaklarımdaki bilgilerimi şöyle bir gözden
geçirdim ve büyük resme(big picture) ulaşmak için adımlarımı atmaya başladım.
Herşeyden önce, geçen hafta servlet' ler
yardımıyla, kullanıcı ile dinamik etkileşimli web sayfalarının nasıl
gerçekleştirilebileceğini incelemiştim. JSP (Java Server Pages)' lerde aynı işi
yapmaktaydı. Aralarındaki farklılıkları düşündüğümde ilk akla gelen, JSP'lerde
html içerik ile Java dilinin kullanıldığı sunucu taraflı (server-side) kodların
bir arada bulunmasıydı. Öyleki servlet'ler ile çalışırken, java kodlarını
kullanarak html çıktılarını üretmek gerçekten zahmetli bir işti. Açıkçası
hammallıktı. Oysaki JSP'de html içerik ile java kodları aynı sayfada yer
alabilmekteydi. Bu ise, tasarımın etkili olduğu, sunucu taraflı java kodları
barındıran web sayfalarının kolayca oluşturulabilmesi demekti.
Bu fark önemsiz gibi görünsede, geliştirme
zamanında oldukça büyük tasarruf sağlamakta. Yaklaşık olarak 8 saatlik bir JSP'
ci olarak bunu ben bile söyleyebiliyorum. Diğer yandan bence asıl önemli olan
fark, JSP sayfalarının işleyiş şekli. Öyleki, oldukça ilginç bir durum söz
konusu. O da, JSP' lerin, istemciler tarafından talep edildiklerinde, eğer bu
talep ilk kez gerçekleşmişse, java kodlarının, servlet'ler haline getirilmesi ve
sınıf olarak derlenmesi. Yani, eninde sonunda yazılan JSP' ler derlencekleri
zaman işin içine servlet' ler girmekte. Kısacası JSP'ler bizi servlet yazma
derdinden kurtarıyor diyebiliriz. Ancak tabiki Jsp' lerin servlet' ler ile
tümleşik olarak çalışmasıda söz konusu. Aslında Java sunucu sayfalarının çalışma
prensibini aşağıdaki şekil ile daha iyi anlatabileceğime inanıyorum.

Jsp sayfalarının çalışma prensibi bu şekilde.
Yani, kullanıcı bir JSP sayfasını ilk kez talep ettiğinde, sunucu bu talep
üzerine ilgili JSP sayfasının java kodlarından bir servlet oluşturuyor. Bu
servlet dosyası aslında bir java byte-code dosyası. Sonraki adımda ise byte-code
dosyası class olarak derleniyor. Derlenen class, kullanıcıdan gelen parametreler
vs... varsa bunlarla birlikte çalıştırılıyor ve üretilen sonuçlar html olarak
tekrardan java sunucusuna gönderiliyor. Java sunucusu ise, bu html sonuçlarını
kullanıcının tarayıcısına gönderiyor. Bu sistem, sadece oluşturulan Jsp sayfası
kullanıcı tarafından ilk kez talep edildiğinde gerçekleştiriliyor.
Nitekim bundan sonraki çağrılarda zaten var olan
derlenmiş class dosyları çalışıyor. Elbette biz Jsp sayfamızı değiştirirsek
buradaki süreç tekrarlanacaktır. Peki bu teori gerçekten böylemi? Bunu bir
şekilde ispat etmem gerektiğini düşündüm kendimce. Geliştirdiğim, ilk.jsp
dosyasının aynısının farklı isimli bir verisyonunu oluşturdum. Yeni.jsp olarak.
Daha sonra bu sayfayı tarayıcıdan talep ettim. Sonra, alt klasörleri gezinmeye
başladım. Nemi arıyordum? İçinde Yeni kelimesi olan java ve class uzantılı
dosyalar. Eğer bu dosyaları bulursam gerçektende teorinin çalışmasını ispatlamış
olucaktım. Derken,
| D:\Program
Files\Allaire\JRun\servers\default\default-app\WEB-INF\jsp |
klasöründe, bu dosyaları buldum.

Ancak bu ispatta eksik olan bir şeyler var
gibiydi. Belkide ben Jsp dosyasını kaydettiğimde, bu dosyalar otomatik olarak
oluşturulmuştu. İşte bu hipotezi yıkmanın tek bir yolu vardı. Yeni bir jsp
dosyası oluşturacak, bu sayfanın oluşturuluş zamanını kaydedecek sonra bir kahve
molası verecektim. Geldiğimde tarayıcıdan bu sayfayı çalıştıracak ve oluşan java
ve class dosyalarının süresini, jsp dosyasının oluşuturuluş süresi ile
karşılaştıracaktım. Bunun üzerine, Yeni.Jsp' den bir kopya daha oluşturdum.
YeniGibi.jsp.

Şimdi de kahve molasına çıkma zamanı. Neyse, kahve
molasına çıkıp geldim. Bir kaç dakika sonra geldiğimde hemen, jsp klasörünün
içine baktım.

Görünürde YeniGibi.jsp için oluşturulmuş java ve
class dosyalarından eser yoktu. Derken tarayıcıda bu sayfayı tekrardan
çalıştırdım ve jsp klasörüne tekrar baktım.

Artık ispat gerçekleşmişti. Jsp ler ile ilgili
öenmli bir nokta, html sayfaları ile içiçe yazılabilmeleriydi. Aynı asp
sayfalarında olduğu gibi. Tabi java ile yazılan bu sunucu taraflı kodlar, tam
anlamıyla nesne yönelimli bir dilin avantajlarını kullandığından oldukça esnek
ve güçlü sonuçlar elde etmemizi sağlamaktaydı. Peki içiçe çalışan bu sayfaların
işleyişine yakından bakmak isteseydim nasıl bir şekli kafamda canlandırabilirdim
diye düşünmeye başladım. Sonuçta aşağıdaki nacizane şema ortaya çıktı.

Bu şema aslında, Jsp' nin bir avantajınıda
göstermekte. O da, tasarım ve kodlama katmanlarının ayrı ayrı ele alınması.
Yani, bir tasarımcı ve bir java programcısı kafa kafaya verdiklerinde, dünyanın
en çok konuşulan etkileşimli web sayfalarını yazabilirler. Kodlamacı java dili
ile sayfayı kodlarken, tasarımcı sadece görsel tasarım ile ilgilenecektir. Gerçi
ben, Asp.Net ile gelen code-behind modelini bu modele tercih ederim. Nitekim
oradada kod katmanı ve tasarım katmanı ayrıdır. Hatta o kadar ayrı
olabilirlerki, code-behind tekniği sayesinde, aspx sayfalarına ati kodlar C#
gibi nesne yönelimli bir dil ile ayrı sınıf dosyalarında toparlanabilir. Tabiki
.net içindeki bu teknik servletlere nazaran, kod ve sunum katmanının daha iyi
entegre çalışmasını sağlayan bir yapı üzerinde teşkil edilmiş.
Bu kadar laf kalabalığından sonra aslında işe
yarar bir örnek yapmanın zamanı geldi. İşe yarar dediysem ufkumu açmak için
teşebbüste bulunacak işe yaramaz bir uygulamdan bahsediyorum elbette. En
azından, bir jsp sayfasındaki form bilgilerinin başka bir jsp sayfası tarafından
ele alınmasını sağlamak gibi basit bir işlem gerçekleştirebilirim. Bu amaçla
aşağıdaki kodları içeren jsp sayfalarını oluşturdum.
Giris.jsp sayfası;
<html>
<head>
<title>ilk jsp</title>
<body>
<form name="form1" method="post" action="kontrol.jsp">
<table width="200" border="0">
<tr>
<td>Ad</td>
<td><input type="text" name="tAd"></td>
</tr>
<tr>
<td>Soyad</td>
<td><input type="text" name="tSoyad"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html> |

kontrol.jsp
<html>
<head>
<title>Giriş</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="200" border="0">
<tr>
<td><strong><%=request.getParameter("tAd")%></strong></td>
</tr>
<tr>
<td><strong><%=request.getParameter("tSoyad")%></strong></td>
</tr>
</table>
</body>
</html> |
Yazdığım kodlarda tek göze çarpan nokta, form'
daki field' lara ait değerleri, kontrol.jsp dosyasında, request sınıfının
getParameter metodu ile alıyor oluşumdu. Hemen, giriş.jsp sayfasını sunucuda
çalıştırdım ve bilgileri girip buton kontrolüne bastım. Sonuçta, kontrol.jsp
sayfam çalıştı ve aşağıdaki ekran görüntüsünü elde ettim.

Jsp oldukça geniş bir konu ve incelenmeye değer.
Şu an için çalışma prensibini, en büyük avantajını ve nasıl geliştirildiğini
biliyorum. Ancak elbetteki bir kaç günlük çalışma ile Jsp' ye hakim olamam. Hiç
olmassa ilk bakışta göze çarpan noktaları irdelemiş oldum.
Bu kahve molamız ile birlikte Java ile 24 Kahve
Molasının' da sonuna gelmiş bulunuyoruz. Ancak bunun bir son olmadığını hatta
bir başlangıç olduğunu söylemek isterim. Nitekim değinemediğim pek çok konu var.
Örneğin değerli bir okurumuzun belirttiği gibi ağ programcılığı. Bunun dışında,
thread' ler, koleksiyonlar (torbalar), IO (Input-Output) işlemleri vb...
Dolayısıyla bu konularada değinmek ve incelemek düşüncesindeyim. Bundan
sonrasında, her cuma olmasa bile düzenli olarak bahsettiğim konuları inceleyecek
ve yazmaya çalışacağım.
Umuyorum ki bu yazı dizisinde sizlere Java dilini
bir nebze olsun öğretebilmişimdir. Ben bir şeyler öğrendim. Ama elbetteki
öğreniklerimi tekrar etmessem, gerçek projelerde kullanmassam kolayca
unutabilirim. Sizlere de tavsiyem bol bol tekrar etmeniz ve projeler
geliştirmeniz olacaktır. Hepinize mutlu ve sağlıklı günler dilerim. Salıcakla
kalın.
Burak Selim ŞENYURT
selim@bsenyurt.com