JSTL (JSP Standart Etiket Kütüphanesi)
Bu JSTL eğitiminde farklı JSTL etiketlerini kullanmanın JSP kodlamayı nasıl kolaylaştıracağını göreceğiz.
JSTL nedir? Java?
JSTL için standlar Java sunucu sayfaları standart etiket kitaplığıdır ve ortak web geliştirme işlevselliği sağlayan özel JSP etiket kitaplıklarının bir koleksiyonudur. JSTL, JSP'nin standart bir etiket kütüphanesidir.
JSTL'nin Avantajları
JSTL'nin avantajları aşağıdadır:
- Standart Etiket: JSP sayfalarının taşınabilir işlevselliğinin zengin bir katmanını sağlar. Bir geliştiricinin kodu anlaması kolaydır.
- Düzgün ve Temiz Kod: Komut dosyaları geliştiricinin kafasını karıştırdığından, JSTL kullanımı kodu düzenli ve temiz hale getirir.
- Otomatik JavafasulyeAra Gözetim Desteği: JSTL'nin JSP scriptlet'lerine göre avantajı vardır. JSTL İfade dili tanıtıcıları JavaFasulye kodunu çok kolay. Kapsamlı öznitelikler olarak alınan nesneleri küçültmemize gerek yok. JSP scriptlet kodunu kullanmak karmaşık olacaktır ve JSTL bu amacı basitleştirmiştir.
- İnsanların okuması daha kolay: JSTL şuna dayanmaktadır: XMLHTML'ye çok benzer. Bu nedenle geliştiricilerin anlaması kolaydır.
- Bilgisayarların anlaması daha kolay: Gibi araçlar Dreamweaver ve ön sayfa giderek daha fazla HTML kodu üretiyor. HTML araçları, HTML kodunu biçimlendirme konusunda harika bir iş çıkarır. HTML kodu komut dosyası koduyla karıştırılır. JSTL, XML uyumlu etiketler olarak ifade edildiğinden, HTML üretiminin belge içindeki JSTL kodunu ayrıştırması kolaydır.
JSTL Etiketleri
Çekirdek etiketler JSP'de en sık kullanılan etiketlerdir. İçin destek sağlıyorlar
- tekrarlama
- Koşullu mantık
- İstisnayı yakala
- url'yi ilet
- Yönlendirme vb.
Çekirdek etiketleri kullanmak için önce etiket kitaplığını tanımlamamız gerekir ve aşağıda etiket kitaplığını içerecek söz dizimi yer almaktadır.
sözdizimi:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Burada,
- önek tüm temel etiketleri tanımlamak için kullanılabilir ve
- uri, içe aktarıldığı taglib kütüphanesidir
Temel etiketlerden bazılarını ayrıntılı olarak görelim,
1. Dışarı
- İfadenin sonucu out etiketinde görüntülenir
- Doğrudan XML etiketlerinden kaçabilir. Bu nedenle gerçek etiketler olarak değerlendirilmezler.
Sözdizimi:
<c:out value="" default="" escapeXML="">
- Burada değer, çıktıya gönderilen bilgiyi temsil eder ve zorunludur
- Varsayılan, bilgilerin çıktısının alınamamasıdır ve zorunlu değildir
- escapeXML – XML karakterlerini kaçırıyorsa doğrudur.
Örnek:
Coretag_jsp1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Core Tag JSP1</title> </head> <body> </body> </html>
Kodun açıklaması:
Kod Satırı 3: Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'c'dir. Bu nedenle tüm çekirdek etiketler için önek olarak kullanılabilir.
Kod Satırı 12: Burada coretag out'u “c” önekiyle kullanıyoruz ve bu out, ifade etiketindeki değeri yazdıracaktır. Dolayısıyla çıktı isim olacaktır
Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız:
Çıktı:
- Değeri isim olarak çıkış akışında yazdırılacak olan “out” çekirdek etiketinden alıyoruz.
2. Yakala
- Gövdede oluşan her türlü atılabilir istisnayı yakalar ve çıktı olarak gösterir.
- Hataları ele almak ve yakalamak için kullanılır.
Sözdizimi:
<c:catchvar="">
Burada var, atılabilir istisnayı tutacak değişkenin adını temsil eder.
Örnek:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Core Tag JSP2</title> </head> <body> <c:catch var="guruException"> <% int num = 10/0; %> </c:catch> The Exception is : ${guruException} </body> </html>
Kodun açıklaması:
Kod Satırı 3: Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'c'dir, dolayısıyla tüm çekirdek etiketler için önek olarak kullanılabilir
Kod Satırı 11-13: Coretag catch, istisnayı yakalamak ve istisnayı yazdırmak için kullanılır. Burada istisna 10/0 olduğunda ortaya çıkar ve bu istisnanın adı "guruException"dır.
Kod Satırı 14: “GuruException” yazdırıyoruz.
Kodu çalıştırdığınızda aşağıdaki çıktıyı alacaksınız:
Çıktı:
- Aritmetik İstisnayı /by sıfır olarak alıyoruz ve çıktıya “guruException” değişkeni kullanılarak yazdırılıyor.
3. İçe aktar
- Daha önce yaptığımız gibi başka bir dosya içeriğini JSP sayfasına aktarabiliriz. JSP eylemi dahil et.
- Buraya URL'yi de ekleyebiliriz ve içerikler o sayfada görüntülenecektir.
Sözdizimi:
<c:importvar="" uri="">
Burada var, dosya adını/uri'yi tutacak bir tanımlayıcı olan değişken adıdır. uri, göreceli dosya adı veya uriname'dir.
coretag_jsp31.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Core Tag JSP 31</title> </head> <body> <c:import var="displayfile" url="coretag_jsp32.jsp"> </c:import> <c:out value="${displayfile}"/> </body> </html>
Coretag_jsp32.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <a>The file is diplayed after importing</a> </body> </html>
Kodun açıklaması:
Coretag_jsp31.jsp
Kod Satırı 3: Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'c'dir, dolayısıyla tüm çekirdek etiketler için önek olarak kullanılabilir
Kod Satırı 11-12: Burada coretag_jsp32.jsp dosyasını import etiketini kullanarak bu dosyaya aktarıyoruz.
Kod Satırı13: Burada coretag_jsp32.jsp dosyasını out etiketini kullanarak yazdırıyoruz.
Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız.
Çıktı:
- Bu dosya coretag_jsp32.jsp dosyasına aktarıldığı için çıktıda Coretag_jsp31 yazdırılır.
4. Her biri için
- İfade serisindeki öğelerin sayısını yinelemek için kullanılır.
- Bu bir ile aynı Java forloop.
Sözdizimi:
<c:forEach var="" begin="" end="">
- Burada var, sayaç adını tutacak değişken adını temsil eder
- Başlangıç, sayaç başlangıç değerini temsil eder
- End, bitiş değerini temsil edecek
Örnek:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Core Tag JSP4</title> </head> <body> <c:forEach var="gurucount" begin="5" end="10"> <c:out value="${gurucount}"/> </c:forEach> </body> </html>
Kodun açıklaması:
Kod Satırı 3: Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'c'dir, dolayısıyla tüm çekirdek etiketler için önek olarak kullanılabilir
Kod Satırı 11-13: Burada değişken adı “gurucount” olan ve sayımı 5 olarak başlayıp sayımı 10 olarak bitiren “forEach” döngüsünü kullanıyoruz. 5'ten 10'a kadar sayıları olan gurucount değişkenini yazdırıyoruz.
Kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız
Çıktı:
- Aldığımız çıktı 5'ten 10'a kadar başlıyor.
5. Eğer
- İçin kullanılır Test yapmak koşulları.
- Etiket, bir koşulun doğru olup olmadığını buna göre test etmek için kullanılırsa, kod bloğu yürütülür.
Sözdizimi:
<c:if test="${condition}></c:if>
Burada koşul doğruysa bir dizi ifade yürütülür.
Örnek:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Core Tag JSP5</title> </head> <body> <c:set var="count" value="100"/> <c:if test="${count == 100}"> <c:out value="The count is 100"/> </c:if> </body> </html>
Kodun açıklaması:
Kod Satırı 3: Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'c'dir, dolayısıyla tüm çekirdek etiketler için önek olarak kullanılabilir
Kod Satırı 11: Burada count isimli değişkeni 100 olarak ayarlıyoruz.
Kod Satırı 12-14: Burada sayımın 100'e eşit olup olmadığını kontrol ettiğimiz "eğer koşulu"nu kullanıyoruz. 100'e eşitse çıktıyı "Sayı 100" olarak alırız.
Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız
Çıktı:
- “If” koşulu doğru olduğu için “Sayı 100” çıktısını alıyoruz.
6. yönlendirme
- Bu etiketin göreceli URL'sini sağlayarak mevcut sayfayı başka bir URL'ye yönlendirmek için kullanılır.
- Bağlama göreli URL'leri destekler
Sözdizimi:
<c:redirect url="" context=""/>
Burada URL, yönlendirilmesi gereken göreceli URL ve yerel web uygulamasının içerik adıdır.
Örnek:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Core Tag JSP6</title> </head> <body> <c:redirect url="/"/> </body> </html>
Kodun açıklaması:
Kod Satırı 3: Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'c'dir, dolayısıyla tüm çekirdek etiketler için önek olarak kullanılabilir
Kod Satırı 11: Burada url adını belirttiğimiz “redirect tag” kullanıyoruz ve o sayfaya tıkladığımızda yönlendirme için verilen siteye yönlendiriyor.
Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız;
Çıktı:
- Coretag_jsp99.jsp tarafından yönlendirilen guru6.com çıktı URL'sini alıyoruz.
JSTL Özel Etiketler
- Kullanıcı tarafından tanımlanan bir JSP dil öğesi.
- JSP bir sunucu uygulamasına çevrildiğinde, özel etiket, bir nesne üzerinde işlem yapan ve etiket işleyici olarak adlandırılan bir sınıfa dönüştürülür.
- Sunucu uygulaması yürütüldüğünde bu eylemler web kapsayıcısı tarafından çağrılır.
- Kullanıcı tanımlı özel etiketi oluşturmak için SimpleTagSupport'u genişletecek ve doTag() yöntemini geçersiz kılacak etiket işleyicisini oluşturmamız gerekir.
- Sınıf dosyasını TLD'de eşlememiz gereken yerde TLD oluşturmamız gerekiyor.
JSP'de özel etiketlerin avantajları
JSP'deki özel etiketlerin avantajları şunlardır:
- Taşınabilir: Bir etiket kütüphanesinde tanımlanan bir eylemin herhangi bir JSP konteynerinde kullanılabilir olması gerekir.
- basit: Basit kullanıcılar bu mekanizmayı anlayıp kullanabilmelidir. JSP işlevselliğinin satıcıları bunu kullanıcılara eylem olarak sunmayı kolay bulmalıdır.
- İfade edici: Mekanizma, iç içe geçmiş eylemler, eylem gövdeleri içindeki betik öğeleri, betik değişkenlerinin oluşturulması, kullanımı ve güncellenmesi dahil olmak üzere geniş bir yelpazedeki eylemleri desteklemelidir.
- Farklı betik dillerinden kullanılabilir: JSP spesifikasyonu şu anda yalnızca komut dosyaları için semantiği tanımlasa da Java programlama dili olarak diğer kodlama dillerinin olasılığını açık bırakmak istiyoruz.
- Mevcut konsept ve makineler üzerine inşa edilmiştir: Başka bir yerde var olanı yeniden icat etmek istemiyoruz. Ayrıca, onları tahmin edebildiğimiz zaman gelecekteki çatışmalardan kaçınmak istiyoruz.
Sözdizimi:
testGuru etiketi oluşturduğumuzu ve doTag() yöntemini geçersiz kılacak taghandlertestTag sınıfını kullanabileceğimizi düşünün.
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Ayrıca bu testTag sınıfını TLD'de (Tag Library) eşlememiz gerekecek. Descriptveya) JSP konteyneri, sınıf dosyası ile TLD dosyasında belirtilen uri arasında otomatik olarak bir eşleme oluşturacaktır.
JSP Etiket Arayüzü
- Bu sınıfın SimpleTagSupport sınıfını genişletmesi gerekecek.
- Bu sınıfın, SimpleTagSupport sınıfının bir parçası olan doTag() yöntemini geçersiz kılması gerekecektir (geçersiz kılma, üst sınıftan miras alınan bir yöntemdir).
- Bu arayüz JSPTag arayüzünün bir alt arayüzüdür.
- Etiketin başında ve sonunda gerçekleştirilecek yöntemler sağlar.
- Ayrıca bu sınıfı TLD yani Etiket Kitaplığı tanımlayıcısında eşlememiz gerekiyor.
Aşağıdaki örnekte ele alıyoruz
Etiket Arayüzü Yöntemi
- doTag(), etiketin içeriğine sahip olacak ve geçersiz kılmamız gereken bir yöntemdir.
- getJSPContext() işlevini kullanarak mevcut JSP İçeriğini alır.
Örnek:
Özel etiket_jsp1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Custom Tag</title> </head> <body> <ex:guruTag/> </body> </html>
Özel.tld
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Test TLD</short-name> <tag> <name>guruTag</name> <tag-class>demotest.guruTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
guruTag.java(TagHandler)
package demotest; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class guruTag extends SimpleTagSupport{ public void doTag() throws JspException,IOException { JspWriter out = getJspContext().getOut(); out.println("Guru Tag"); } }
Kodun açıklaması:
guruTag.java(TagHandler)
Kod Satırı 6:guruTag sınıfı, javax.servlet.JSP jar'da bulunan SimpleTagSupport sınıfını genişletiyor
Kod Satırı 7: Burada JspException ve IOException'ı atan doTag() yöntemini geçersiz kılıyoruz.
Kod Satırı 9-10: Bu yöntemde kod çağrılacak özel etikete yerleştirilecektir. JspWriter'ın bir nesnesini alıyoruz ve bu “Guru Tag” yazdıracak.
Özel.tld
Kod Satırı 6: Buradaki özel etiketin adı “guruTag”dır.
Kod Satırı 7:Etiket sınıfı taghandler sınıfıdır, yani guruTag.java. Dosyanın konumunun dizin yolunu içeren işleyici dosyasının tam yolunu alır.
Özel etiket_jsp1.jsp
Kod Satırı 3:Bu taglib öneki tüm etiketler için gereklidir ve eklenen önek 'ex'tir, dolayısıyla tüm çekirdek etiketler için bir önek olarak kullanılabilir ve uri, etiket işleyiciyi eşleyen özel.tld'dir.
Kod Satırı 11: Burada işleyici sınıfı doTag() yöntemini çağıracak ve içindeki kodu çalıştıracak olan “guruTag” özel etiketini tanımlıyoruz.
Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız
Çıktı:
- Çıktıyı guruTag.java yani TagHandler'dan "GuruTag" olarak alıyoruz, bu doTag() metodunu geçersiz kılıyor ve çıktı olarak "Guru Tag" yazdırıyor.
ÖZET
- Bu bölümde çekirdek etiketler ve özel etiketler yaptığımız JSP standart etiket kitaplığını öğrendik.
- Çekirdek etiketler arasında JSP'de temel amaçlar için kullanılan for, if, redirect, import, catch etiketleri yer alır.
- Ayrıca, etiketleri tanımlayıp JSP'de kullanabileceğimiz özel etiketler de yaptık.