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.
|