JSTL DOKÜMANI İçindekiler 1. JSTL e Genel Bakış 1.1. JSP scriptlet etiketleri kullanmada ne sorunlar var? 1.2. JSTL in faydaları neler? 1.3. JSTL in olumsuz yanları neler? 2. JSTL Kullanma 2.1. JSTL Kullanım Kalıpları 2.2. Örnek : JSTL scriptletleri temizliyor 3. JSTL Kurma 4. Örnek: Merhaba Dünya! 5. Başvurulan Kaynaklar Yazan: Elif Yavuz 1
JSTL (Java Sunucu Sayfaları Standart Etiket Kütüphanesi) JSTL e Genel Bakış JSTL (java sunucu sayfaları standart etiket kütüphanesi), Sun şirketinin JSP üzerine kurduğu bir etiket kütüphanesidir. JSP'nin dil olarak ve özellikle bilgi işlem uygulamaları için yetersiz kaldığı fark edilince, JSTL dili piyasaya çıktı. Zaten, ATG gibi güçlü Uygulama Servis programları, standart dışında kalmış olmalarına rağmen kendi etiket kütüphanelerini uzun süredir kullanıyorlardı. Bunda JSP'nin çok temel oluşu, ATG örneğinde ise, daha revaçta bile olmayışı da büyük bir rol oynamıştır. JSTL etiketleri(tags) aşağıda belirtilen 4 kütüphanede düzenlenmiştir : Tanım Önek Varsayılan URI Core c http://java.sun.com/jstl/core XML İşleme x http://java.sun.com/jstl/xml I18N & Biçimlendirme fmt http://java.sun.com/jstl/fmt Veri tabanı erişimi sql http://java.sun.com/jstl/sql core: Temel fonksiyonlar: döngüler, koşul deyimleri, girdi/çıktı; xml: XML işleme ; fmt: para birimi ve tarihler gibi bazı verileri uluslarasılaştırma ve biçimlendirme; sql: Veritabanı erişimi 2
JSP scriptlet etiketleri kullanmada ne sorun var? JSP şu anda JAVA da devingen web sayfaları yapma konusunda standart teknoloji haline gelmiştir. Fakat bazı zayıflıkları vardır: Java kodu içine gömülmüş scriptlet etiketler çirkin ve rahatsız edici bir görünüme sahiptir. Java geliştiricisi olmayan bir kişi gömülü Java kodunu değiştiremez. Bu da JSP nin esas yararı olan, geliştiricileri ve işteki insanları sayfa içeriğini günleme konusunda yetkilendirme özelliği ortadan kalkmış oluyor. JSP scriptletleri içeren Java kodu diğer JSP sayfaları tarafından kullanılamaz, bu da yaygın program parçalarının bir çok sayfada yeniden yazılmasına neden olur. JSTL in faydaları nelerdir? JSTL etiketleri XMLdir, bu etiketler HTML sayfalarının etiketleri içine temiz ve biçimli bir şekilde harmanlanmıştır. JSTL in 4 tane olan etiket kütüphanesi JSP sayfalarında gereken çoğu işlevselliği sağlamaktadır. JSTL etiketleri Java programlama hakkında bilgisi olmayan kişilerce de kolaylıkla anlaşılabilirdir. JSTL etiketleri yeniden kullanılabilirlik mantığını da içermektedir :tarih ve sayılar gibi verileri biçimlendirerek. JSTL etiketleri istek(request) ve oturumda(session),nesnelerin türünü bilmeksizin ve çevirmeye gerek duymaksızın, nesneler, referans gösterebilirler. JSP nin ifade dili (Expression Language) getter ve setter yöntemlerinin Java nesneleri üzerinden çağrılmasını kolaylaştırır. Bu imkan JSP 1.2 de yok, fakat JSP 2.0 la birikte mevcuttur. Geniş ölçüde JSTL de kullanılıyor. 3
JSTL in olumsuz yanları nelerdir? JSTL in çeşitli dezavantajları bulunmaktadır: JSTL sunucuya işleme ek yükü getirebilir. Hem Java scriptlet kodları hem de etiket kütüphaneleri sonuç servlet olarak derlenir. Daha sonra bunlar servlet kabı(container) tarafından çalıştırılır. Scriptlet etiketleri içine gömülmüş Java kodları sonuç servlete kopyalanır. Diğer yandan JSTL etiketleri, servlete daha fazla kod eklenmesine neden olur. Çoğu durumda bu ölçülemez, fakat dikkate alınmalıdır. Scriptletler JSTL etiketlerine göre daha güçlüdür. Eğer her şeyi JSP sayfalarında yapmak istiyorsanız, gömülmüş Java kodlarıyla uğraşmak zorundasınızdır. JSTL, güçlü bir yeniden kullanılabilir kütüphane seti sağlamasına rağmen, Java kodunun yapabileceği her şeyi yapamaz. JSTL sunum kodunu kolaylaştırmak için, Model/Şekil/Kontrol uygulamalarının şekil katmanı için tasarlanmıştır. Model/Şekil/Kontrol mimarisi, 'model' olarak yazılmış işlem mantığının 'kontrol' kodları tarafından değiştirildiği ve sonucun 'şekil' üzerinde gösterecek şekilde kurulmuş sistemlere (mimariye) verilen addır. Günümüz Internet/Java mimarisinde model Java çekirdek(bean) /işlem mantığı kodları, şekil JSTL etiketleri (ve yardımcı görsel kütüphaneleri), kontrol da Servlet ya da görüntüsüz JSP kodları olarak tanımlanabilir. 4
JSTL Kullanma JSTL Etiketleri Alan İşlev Etiketler TLD Önek İfade dili desteği catch out remove set Core Akış denetimi choose when otherwise foreach fortokens if /jstl-c c URL Yönetimi import redirect url Core out parse set XML Akış denetimi choose when otherwise foreach if /jstl-x x Dönüşüm transform Yerelleştirme setlocale I18n Mesaj biçimlendirme Sayı ve Tarih Biçimlendirme bundle message setbundle formatnumber formatdate parsedate parsenumber settimezone timezone /jstl-fmt fmt setdatasource Database SQL query dateparam transaction update dateparam /jstl-sql Sql 5
JSTL daha önce de bahsedildiği gibi sayısı oldukça fazla olan etiketleri işlevsel alanlara bölüyor. Bu yüzden, JSTL de işlevsel alanları ve adlarını net bir şekilde göstermek için bir çok etiket kütüphanesi açıklayıcıları (tag library descriptor -TLD), bulunmaktadır. Yukarıdaki tablo mantıksal TLD isim ve önekleriyle, işlevsel alanları özetlemektedir. Bir JSTL kütüphanesini kullanabilmek için, gerçekleştiriminin kap(container) veya RI tarafından içerilmesine bakılmaksızın, bir kütüphaneyi taglib komutu tanımlanmalıdır: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> Unutulmamalıdır ki varsayılan(default) URI kullanılıyor, JSP tanımı üzerine yazma imkanı sağlasa da. Bir kabın JSTL JSP sayfasına ilişkin sınıfın işlemleri için en iyi kodu oluşturmasına izin verilir. Bu da daha iyi bir performansa neden olur. Bu sadece varsayılan URI kullanıldığında olur, bununla birlikte kap en iyi uygulamayı kullanabilir. JSTL Kullanım Kalıpları JSTL, oturum veya istek seviyesinde Java nesnelerine erişerek, get..() işlemlerini çağırabilir, ve sonuçları döngü kullanarak tablo içinde, ya da bağlantı olarak tıklanabilir şekilde sayfada gösterebilir. 1..10 arası sayan bir döngü kurmak için, <c:foreach var="i" begin="1" end="10"> <c:out value="${i}"/> </c:foreach> Bu tabiri kullanmak, aşağıdaki şekilde kodlamaktan oldukça kolay!.. <% for (int i=0; i<10; i++) { %> <%=i%> <% } 6
%> JSP kodu üzerinde Java'nın nerede bitip nerede başladığı anlaşılmıyor. JSTL ile her şey etiket. Yani JSTL kodunun bakımı ve değiştirilmesi daha rahat olacak. Bağlantı göstermek için, c:url tabiri kullanılır. <a suraya="<c:url value="urun_detay_goster.jsp"> <c: name="urun" value="${urun.no}"/></c:url>"> <c:out value="${urun.isim}"/> </a> Eğer, List arayüzünü uzatmış olan bir Java nesnesinin 'elemanlarını' teker teker işlemek istiyorsanız, JSTL ile bu çok basit: <c:foreach var="i" items="${nesne.liste}"> <!-- ${i} ile istediğinizi yapın.. --> </c:foreach> Bu örnekte, nesne değişkeni üzerinde getliste() yönteminin tanımlandığı varsayılıyor. JSP standardi, get.. önek kısmının koyulmasına gerek bırakmadan, 'liste' dediğinizde 'getliste' yöntemini çağırıyor. 7
Örnek: JSTL scriptletleri temizliyor: JSP sayfalarının bakılabilirliğinin ve temizliğinin ispatı için aşağıdaki 2 basit JSP sayfasını inceleyelim. İlk JSP sayfası geleneksel scriptlet etiketleri, ikincisi ise JSTL etiketleri kullanmaktadır. Her iki sayfada da aynı işlem mantığı gerçekleşmektedir. AdresVO modeli nesnelerinin bir listesini request ten alıyorlar, liste üzerinde gezerek her modelin soyisim niteliğini boş (null) olmadığı sürece ekrana döker. Boşsa N/A yazar. Sonunda da o anki tarih bilgisi ekrana dökülür. JSP scriptlet etiketleri ile: <%@ page import="com.musteri.model.adresvo, java.util.*"%> <p><h1>müşteri İsimleri</h1></p> <% List adresler = (List)request.getAttribute("adresler"); Iterator adresiter = adresler.iterator(); while(adresleriter.hasnext()) { AdresVO adres = (AdresVO)adresIter.next(); if((null!= adres) && (null!= adres.getsoyisim()) && (adres.getsoyisim().length() > 0)) { %> <%=adres.getsoyisim()%><br/> <% } else { %> N/A<br/> <% } } %> <p><h5>son güncellenme Tarihi: <%=new Date()%></h5></p> 8
JSTL etiketleri ile: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <p><h1>müşteri İsimleri</h1></p> <c:foreach items="${adresler}" var="adres"> <c:choose> <c:when test="${not empty adres.soyisim}" > <c:out value="${adres.soyisim}"/><br/> </c:when> <c:otherwise> N/A<br/> </c:otherwise> </c:choose> </c:foreach> <jsp:usebean id="now" class="java.util.date" /> <p><h5> Son güncellenme Tarihi: <c:out value="${now}"/></h5></p> JSTL Kurmak İçin Tomcat için JSTL kurmak istiyorsanız http://www.apache.org/dist/jakarta/taglibs/standard/ adresinden etiket kütüphanesini indirin. Kurduktan sonra, eğer Tomcat altında çalışıyorsanız, (sitenizin-ismi)/web-inf/web.xml altında, şunu tanımlayın. <web-app>.. <taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/web-inf/tags/c.tld</taglib-location> </taglib>.. </web-app> 9
Şimdi, (sitenizin-ismi)/web-inf/tags/ adlı bir dizin altına, Jakarta'dan gelen tld dosyalarını kopyalayın. Bunu Ant'e otomatik olarak yaptırabilirsiniz. (sitenizin-ismi)/web-inf/lib/ altına, Jakarta'dan gelen jar dosyalarını kopyalayın. Bunu da Ant'e otomatik olarak yaptırabilirsiniz. Artık JSTL kullanmayı istediğiniz her sayfanın başında, şu ibareyi kullandıktan sonra, JSTL'iniz çalışıyor olacak. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> Örnek : JSTL "Merhaba Dünya!" JSTL in kurulup kurulmadığını test etmek için Merhaba Dünya! yazan programı yazalım. Aşağıdaki kod kesimini bir kütüğe yazdıktan sonra merhabadünya.jsp ismiyle (ya da jsp uzantılı başka bir isimle) servlet kabının kökünün altında bir yere kaydedilmeli. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> Bu değerle günlüyor: "Merhaba Dünya!" <c:set var="merhaba" value="merhaba Dünya!"/> <p/> <c:out value="${merhaba}"/> Eğer kurulum başarıyla gerçekleşmişse, sayfaya web tarayıcınızla eriştiğinizde aşağıdaki ibareler görülür: Bu değerle günlüyor: "Merhaba Dünya!" Merhaba Dünya! 10
JSP sayfasında ne oluyor? merhabadünya.jsp nin 1. satırında core etiket kütüphanesini alabilmek için,taglib komutu kullanıldı ve c: öneki taglibe atandı. c: JSP sayfası içinde core etiketlerinin kullanılacağını söylüyor. Bu örnekte c:set ve c:out olmak üzere 2 tane etiket kullanıldı. 4.satırda c:set etiketi Merhaba Dünya! değerini merhaba değişkenine atamak için kullanıldı. 6.satırda c:out etiketi merhaba değişkeninin değerini yazdırmak için kullanıldı. Başvurulan Kaynaklar : 1. http://www.onjava.com/pub/a/onjava/2002/08/14/jstl1.html 2. http://java.about.com/od/beginningjava/l/aa_jstl_intro.htm 3. http://java.sun.com/products/jsp/jstl/index.jsp 4. http://java.sun.com/j2ee/1.4/docs/tutorial/doc/jstl.html 5. http://www-106.ibm.com/developerworks/java/library/j-jsp05273.html 11