jsp custom tag library

43
Gökhan Tanışık gokhantanisik @ hotmail .com 30.06.2008 1

Upload: seleciii44

Post on 20-Jun-2015

2.873 views

Category:

Technology


5 download

DESCRIPTION

Jsp Custom tag library nedir nasıl oluşturulur...

TRANSCRIPT

Page 1: JSP Custom Tag Library

Gökhan Tanışı[email protected]

30.06.2008

1

Page 2: JSP Custom Tag Library

AmaçCustom tag library nedir?Niçin kullanılır?Kendi kütüphanemizi nasıl oluştururuz?Jstl(Jsp standart tag library) nedir,

fonksiyonları nelerdir?

2

Page 3: JSP Custom Tag Library

İçerikCustom Tag Library nedir?Kendi kütüphanemizi oluşturmakJsp Expression Language(ifade dili)JSTL (JSP standart tag library)

3

Page 4: JSP Custom Tag Library

Custom Tag Library nedir?Jsp bilindiği gibi java ile yazılmış web

uygulamalarında uygulamanın kullanıcı ara yüzünü oluşturmak ve bu arayüzü iş mantığından ayırmak için tasarlanmıştır.

Custom tag library jsp v1.1 ile gelen ve bu ayırma işlemine yardımcı olan güçlü bir özelliktir.

4

Page 5: JSP Custom Tag Library

Custom Tag’ları çekici kılan?Custom Tag’lar

Çağrılan sayfalar tarafından çalışma zamanında veya static olarak olarak attribute’ler aracılığıyla özelleştirilebilir.

Request, response, in ve out da dahil olmak üzere jsp sayfalarının kullanabildiği tüm nesnelere erişebilir

Çağıran sayfadan gelen response’u kullanabilir

5

Page 6: JSP Custom Tag Library

Custom Tag’ları çekici kılan?(2)Birbirleriyle iletişim kurabilirler, JavaBeans

bileşenlerini oluşturup, bir tag’da o bean’a referans bir değişken tanımlayıp, o bean’ı başka bir tag’da kullanabilirler.

Birbirleriyle iç içe olabilirler, bir jsp sayfası içerisinde karmaşık etkileşimlere izin verirler.

Basit ve karmaşık işlemleri kapsayarak, söz dizimi kolaylaştırır, jsp sayfasının okunabilirliğini artırır.

6

Page 7: JSP Custom Tag Library

Kendi kütüphanemizi oluşturmakBir tag library’nin iki bileşeni vardır:

Library discriptor File(TLD-kütüphane tanım dosyası)

Tag handler (etiket işleyici)Bu iki bileşenle birlikte jsp dosyaları

kütüphaneyi kullanabilirler.

7

Page 8: JSP Custom Tag Library

TLD dosyasıBir tld (tag library descriptor) dosyası

kütüphaneyi tanımlayan XML görünümlü bir dosyadır.

Dosya kütüphane hakkındaki tüm bilgiler ve kütüphanedeki bütün taglar ile ve bu tagların özelliklerini tarif eder.

Tld dosyaları jsp dosyları tarafından tag ları geçerlemek için kullanılır.

8

Page 9: JSP Custom Tag Library

Kütüphanenin kimlik bilgilerini tanımlayan elemanlar<taglib> : kütüphanenin kendisi<tlibversion> : Kütüphanenin versiyonu<jspversion> : Kütüphanenin bağlı olduğu

jsp versiyonu<shortname> : Kütüphane için, anımsatıcı

(mnemonic) bir değerle basit bir ön tanımlı(default) ad.

<uri> : Kütüphaneyi belirleyen unique URI

<info> : Kütüphaneyi açıklayıcı bilgi9

Page 10: JSP Custom Tag Library

Tag’ların TLD’de tanıtılması<tag>: tagin niteliklerinin

tanımlandığı bloktur.Her kütüphanede birden fazla tag

tanımlanabilir. Tüm tag’lar tek bir TLD dosyasında tanımlanabilir. Bu noktada TLD dosyaları etiket işleyicinin sınıfını (tag handler’s class) belirlemek için kullanılır:

<tagclass>className</tagclass>10

Page 11: JSP Custom Tag Library

Tag’i tanımlayan diğer özelliklerEğer tag’ı tanımlayan nitelikler (attributes)

varsa <tag> elemanı içerisinde tanımlanmalı<name> : Niteliğin handler sınıfındaki adı<requeired> : Nitelik tag için zorunlu mu?

(“true”/”“false”) <rtexprvalue> : Çalışma zamanlı ifadelere izin

verilmeli mi? (“true”/”false”)

11

Page 12: JSP Custom Tag Library

Tag’i tanımlayan diğer özellikler(2)Tag in her niteliği için Bean’lar gibi

getter/setter yöntemleri kullanılmalıdır.Tag’larda programcık (scripting)

değişkenleri de kullanmak mümkündür. Bunun için bir TagExtraInfo sınıfı tanımlamak gerekir ve bunu da tag’da belirtmek için

<teiclass>className<teiclass> kullanılır

12

Page 13: JSP Custom Tag Library

Örnek TLD dosyası(ornekTld.tld)<?xml version="1.0" encoding=“UTF-8" ?> <taglib>

<tlibversion> 1.0 </tlibversion><jspversion> 1.1 </jspversion><shortname> tagOrnegi </shortname><info> Bu bir tag kutuphanesi ornegidir </info> <!-- (acıklama satırı) --> <!-- Basit bir tag --><tag>

<name>tagAdi</name><tagclass>customTag.deneme.TagIsleyici</

tagclass>

13

Page 14: JSP Custom Tag Library

ornekTld.tld (2)<!-- Tag’ın gövdesi aşağıdaki değerleri alabilir

empty: Tag’in gövdesinin olmadığını belirtirJSP: Gövdedeki JSP kodu container tarafından değerlendirilir ve tag içerisinde işlenirtagdependent: Gövde sadece tag tarafından

işlenir.Gövdedeki JSP değerlendirilmez--><bodycontent> empty </bodycontent><info> Bu tag’imizin etiket bilgisidir </info><!-- Tag’in niteliklerininin tanımlanması -- ><!-- Nitelikler sınıf işleyicilerinde tanımlı olmalıdır --

>

14

Page 15: JSP Custom Tag Library

ornekTld.tld(3)<attribute>

<name> degiskenAdi </name><required> false </required>

<rtexpvalue> false </rtexpvalue> </attribute>

</tag></taglib>

15

Page 16: JSP Custom Tag Library

Etiket işleyici sınıfı (Tag Handler)Tag’ler işleyici sınıflarda tanımlanırlar.

TagSupport basit tag’ler için ata sınıftır. Javax.servlet.tagext paketi altında bulunurlar.

Tag’lerin hangi interface’leri gerçekleştireceği hangi fonksiyonların çağrılma potansiyeli olduğu ile belirlenir.

16

Page 17: JSP Custom Tag Library

Etiket işleyici sınıfı(2)TagSupport ve TagBodySupport aşağıdaki

ön tanımlı fonksiyonları destekler

17

Eğer tag’inizda…

…karşılık gelen methodu gerçekleştirmelisiniz

Gövde ve nitelik yoksa

doStartTag, doEndTag, release

Nitelik varsa doStartTag,doEndTag,set/getAttributes1…N

Etkileşimsiz gövdesi varsa

doStartTag,doEndTag,release

Etkileşimli gövdesi varsa

doStartTag, doEndTag, release,doInitBody,doAfterBody

Page 18: JSP Custom Tag Library

Ornek tag işleyici:TagIsleyici.javapublic class TagIsleyici extends BodyTagSupport {

private String degiskenAdi= null;public void setDegiskenAdi(String degiskenAdi){ this.degiskenAdi = degiskenAdi;}public String getDegiskenAdi() { return degiskenAdi;}public int doStartTag() {

try { JspWriter out = pageContext.getOut(); out.println("<table border="\1\">"); if (name != null) out.println("<tr><td>Hello "+degiskenAdi+"</td></tr>"); else out.println("<tr><td> Hello unnamed brother </td></tr>");

18

Page 19: JSP Custom Tag Library

} catch (Exception ex) { throw new Error(“Hata!.."); } //Gövde olmadığı için SKIP_BODY döndürülür return SKIP_BODY;

}

public int doEndTag(){ try { JspWriter out = pageContext.getOut(); out.println("</table>"); } catch (Exception ex){ throw new Error(“Hata!.."); } }}

19

Page 20: JSP Custom Tag Library

doStartTag: Etiket ile karşılaşıldığında çağrılırdoEndTag: Etiket sonlandırılırken çağrılırSKIP_BODY: Gövde yoksa veya işletilmeyecekse

döndürülür.

20

Page 21: JSP Custom Tag Library

Örnek Jsp miz: OrnekTag.jsp<%@page contentType="text/html" %><%@page pageEncoding="UTF-8" %><%@taglib uri="/WEB-INF/tld/OrnekTag.tld" prefix="gokhan" %>

<html> <head> <meta http-equiv="Content-Type" content="text/html;"> <title>Ornek tag deneme</title> </head>

<body> <hr/> <gokhan:tagAdi degiskenAdi=“Angelina Jolie"/> <hr/> </body> </html>

21

Page 22: JSP Custom Tag Library

Örnek Jsp’nin HTML çıktısı<html> <head> <meta http-equiv="Content-Type" content="text/html;

charset=ISO-8859-1"> <title>Ornek tag deneme</title> </head> <body>

<hr/><table border="5"><tr><td> Hello Angelina Jolie </td></tr></table>

<hr/> </body> </html>

22

Page 23: JSP Custom Tag Library

23

Page 24: JSP Custom Tag Library

<%@taglib uri="/WEB-INF/tld/OrnekTag.tld“ prefix="gokhan"%> uri : Tld dosyasının yolunu gösterir. (/WEB-INF/tld klasoru

icinde) prefix: Tld dosyasımızdaki etiketler için ön işleyici değeri.

Etiketler önİşleyici:tagAdi şeklinde kullanılır

24

Page 25: JSP Custom Tag Library

Örneğimizi geliştirelimBasit bir etiketin nasıl kullanıldığını gördük.Şimdi etikete ek özellikler ve gövde

ekleyelim…

25

Page 26: JSP Custom Tag Library

TagIsleyici2.javapublic class TagIsleyici2 extends BodyTagSupport {

private String degiskenAdi= null;private int yineleme=1 ;public void setDegiskenAdi(String degiskenAdi) {this.degiskenAdi = degiskenAdi;}public String getDegiskenAdi() {return degiskenAdi;}public String getYineleme() {return (Integer.toString(yineleme));}public void setYineleme(String yineleme) {try {this.yineleme = Integer.parseInt(yineleme);} catch (NumberFormatException e) {this.yineleme=1;}}

26

Page 27: JSP Custom Tag Library

TagIsleyici2.java(2)public int doStartTag() throws JspTagException{try{

JspWriter out= pageContext.getOut();out.println("<table border=\"5\">");if (degiskenAdi!=null)

out.print("<tr><td> Hello "+ degiskenAdi + "</td></tr>");

else out.println("<tr><td>Hello World!

</td></tr>");}catch (IOException e) {

throw new JspTagException (“Hata!.." + e);}return EVAL_BODY_TAG;

}

27

Page 28: JSP Custom Tag Library

TagIsleyici2.java(3)public int doAfterBody() throws JspException { if(yineleme-- >=1 ){

BodyContent body=getBodyContent();

try {JspWriter out= body.getEnclosingWriter();out.println(body.getString());body.clearBody();

} catch (IOException e) {throw new JspTagException(“Hata!.."+e);

}return EVAL_BODY_TAG;

}else {return SKIP_BODY;

}}

}28

Page 29: JSP Custom Tag Library

TagIsleyici2.java(4)public int doEndTag() throws JspTagException{try {

JspWriter out = pageContext.getOut();out.println("</table>");

} catch (Exception e) {throw new JspTagException(“Hata!.." +e);

} return SKIP_BODY;

}

29

Page 30: JSP Custom Tag Library

doAfterBody : Etiketin gövdesi değerlendirildikten sonra çağrılır.

EVAL_BODY_TAG: doAfterBody nin işletilmesini sağlar. Bu değer döndüğü sürece işletilmeye devam eder. Durmak için SKIP_BODY döndürülür.

30

Page 31: JSP Custom Tag Library

OrnekTld2.tld OrnekTld dosyasını bodycontent ten itibaren aşağıdaki gibi degiştirelim

<bodycontent> JSP </bodycontent><info> Bu tag’imizin açıklamasıdır </info><attribute>

<name> degiskenAdi </name><required> false </required><rtexpvalue>false</rtexpvalue>

</attribute>

<attribute><name>yineleme</name><required>false</required><rtexpvalue>false</rtexpvalue>

</attribute></tag>

</taglib>

31

Page 32: JSP Custom Tag Library

OrnekTag2.jsp<%@page contentType="text/html" %><%@page pageEncoding="UTF-8" %><%@taglib uri="/WEB-INF/tld/OrnekTag.tld" prefix="gokhan" %><html> <head>

<meta http-equiv="Content-Type" content="text/html; /><title>Ornek tag deneme</title>

</head> <body>

<hr/> <gokhan:tagAdi degiskenAdi="angelina jolie" yineleme="5">

<tr><td>angelina jolie</td></tr> </gokhan:tagAdi><hr/>

</body> </html>

32

Page 33: JSP Custom Tag Library

OrnekTag2.jsp nin html çıktısı<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-

8859-1"><title>Ornek tag deneme</title></head><body>

<hr/><table border="5">

<tr><td> Hello angelina jolie</td></tr><tr><td>angelina jolie</td></tr><tr><td>angelina jolie</td></tr><tr><td>angelina jolie</td></tr><tr><td>angelina jolie</td></tr><tr><td>angelina jolie</td></tr>

</table><hr/>

</body> </html>

33

Page 34: JSP Custom Tag Library

34

Page 35: JSP Custom Tag Library

JSP ifade dili (Expression Language)Jsp ifade dili JSP sayfalarında bulunan bean

ve nesnelerin özelliklerine kolay bir yazım şakli ile ulaşılmasını sağlar

Basit karşılaştırma ve matematiksel işlemler yapılabilir.

Temel olarak Bean’ların özelliklerine hızlı erişebilmek için kullanılırlar

${ifade} şeklinde kullanılır.

35

Page 36: JSP Custom Tag Library

Ifade dilinde tanımlı değişlenlerpageContext: uygulama genelindeki değişkenlerparam: parametrelerheader: ServletRequest.getHeader(“ad”) = ${header.ad}cookie: ${cookie.ad.value} adı verilen cookinin değerini

çevirirpageScope: sayfadaki değişkenler requestScope: request nesnesindeki değişkenlersessionScope: session daki değişkenlerapplicationScope: uygulama genelindeki değişkenler

36

Page 37: JSP Custom Tag Library

JSTL-Java Standart Tag LibraryTemel olarak 4 temel kütüphane vardır.

37

Tanım Örnek(prefix) Varsayılan Uri

Core c http://java.sun.com/jsp/jstl/core

Xml x http://java.sun.com/jsp/jstl/xml

Format fmt http://java.sun.com/jsp/fmt

Database sql http://java.sun.com/jsp/sql

Page 38: JSP Custom Tag Library

JSTL etiketleri*core : Temel fonksiyonlar: döngüler, koşul

deyimleri, I/O*xml: XML ile ilgili işlemler*fmt: para birimi, tarihler gibi biçimlendirme

işlemleri*sql: Veritabanı erişimi

38

Page 39: JSP Custom Tag Library

JSTL’i kullanmak içinhttp://www.apache.org/dist/jakarta/taglibs/

standard/binaries/ adresinden ilgili arşivi indirin.Arşivi açınca, lib klasörü altındaki jstl.jar ve

standart.jar dosyalarını uygulamanızın /WEB-INF/lib klasörüne kopyalayın.

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>

Yukardaki uri ile çalışmayabiliyor, bu durumda <%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>Şeklinde kullanmayı deneyin.(diğer tag lar için de geçerli)

39

Page 40: JSP Custom Tag Library

OrnekJstl.jsp<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%><%@page contentType="text/html; charset=UTF-8" %><html><head><title>JSTL</title></head><body>

<c:if test="${9>8}"><b> 9, 8'den büyüktür </b><br/>

</c:if><jsp:useBean id="renkler" class="java.util.ArrayList" /><% renkler.add("red");

renkler.add("blue");renkler.add("black");renkler.add("green"); %>

<c:forEach var="renk" items="${renkler}"><font color="${renk}" ><c:out value="${renk}" /></font></c:forEach></body></html>

40

Page 41: JSP Custom Tag Library

OrnekJstl.jsp’nin html çıktısı<html><head><title>JSTL</title></head><body><b> 9, 8'den büyüktür </b><br/>

<font color="red" >red</font>

<font color="blue" >blue</font>

<font color="black" >black</font>

<font color="green" >green</font>

</body></html>

Page 42: JSP Custom Tag Library
Page 43: JSP Custom Tag Library

Sorular?

43