JSP Custom Tag Library
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

JSP Custom Tag Library

  • 4,066 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,066
On Slideshare
4,054
From Embeds
12
Number of Embeds
2

Actions

Shares
Downloads
113
Comments
0
Likes
1

Embeds 12

http://www.slideshare.net 9
http://www.slideee.com 3

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Gökhan Tanışık gokhantanisik @ hotmail .com 30.06.2008
  • 2. 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?
  • 3. İçerik
    • Custom Tag Library nedir?
    • Kendi kütüphanemizi oluşturmak
    • Jsp Expression Language (ifade dili)
    • JSTL (JSP standart tag library )
  • 4. 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.
  • 5. 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
  • 6. 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.
  • 7. Kendi kütüphanemizi oluşturmak
    • Bir 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.
  • 8. 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.
  • 9. 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ı bilgi
  • 10. 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>
  • 11. Tag’i tanımlayan diğer özellikler
    • Eğ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”)
  • 12. 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
  • 13. Örnek TLD dosyası(ornekTld.tld)
    • <?xml version=&quot;1.0&quot; encoding=“UTF-8&quot; ?>
    • <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>
  • 14. ornekTld.tld (2)
    • <!-- Tag’ın gövdesi aşağıdaki değerleri alabilir
    • empty : Tag’in gövdesinin olmadığını belirtir
    • JSP : Gövdedeki JSP kodu container tarafından değerlendirilir ve tag içerisinde işlenir
    • tagdependent : 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 -->
  • 15. ornekTld.tld(3)
    • <attribute>
    • <name> degiskenAdi </name>
    • <required> false </required> <rtexpvalue> false </rtexpvalue>
    • </attribute>
    • </tag>
    • </taglib>
  • 16. 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.
  • 17. Etiket işleyici sınıfı(2)
    • TagSupport ve TagBodySupport aşağıdaki ön tanımlı fonksiyonları destekler
    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
  • 18. Ornek tag işleyici:TagIsleyici.java
    • public 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( &quot;<table border=&quot; 1 &quot;>&quot; );
    • if (name != null )
    • out.println( &quot;<tr><td>Hello &quot; +degiskenAdi+ &quot;</td></tr>&quot; );
    • else
    • out.println( &quot;<tr><td> Hello unnamed brother </td></tr>&quot; );
  • 19.
    • } catch (Exception ex) {
    • throw new Error( “Hata!..&quot; );
    • }
    • //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( &quot;</table>&quot; );
    • } catch (Exception ex){
    • throw new Error( “Hata!..&quot; );
    • }
    • }
    • }
  • 20.
    • doStartTag: Etiket ile karşılaşıldığında çağrılır
    • doEndTag: Etiket sonlandırılırken çağrılır
    • SKIP_BODY: Gövde yoksa veya işletilmeyecekse döndürülür.
  • 21. Örnek Jsp miz: OrnekTag.jsp
    • <%@ page contentType = &quot;text/html&quot; %>
    • <%@ page pageEncoding = &quot;UTF-8&quot; %>
    • <%@ taglib uri = &quot;/WEB-INF/tld/OrnekTag.tld&quot; prefix = &quot;gokhan&quot; %>
    • < html >
    • < head >
    • < meta http-equiv = &quot;Content-Type&quot; content = &quot;text/html;&quot; >
    • < title > Ornek tag deneme </ title >
    • </ head >
    • < body >
    • < hr />
    • < gokhan:tagAdi degiskenAdi = “Angelina Jolie&quot; />
    • < hr />
    • </ body >
    • </ html >
  • 22. Örnek Jsp’nin HTML çıktısı
    • <html>
    • <head>
    • <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;>
    • <title>Ornek tag deneme</title>
    • </head>
    • <body>
    • <hr/>
    • <table border=&quot;5&quot;>
    • <tr><td> Hello Angelina Jolie </td></tr></table>
    • <hr/>
    • </body>
    • </html>
  • 23.
  • 24.
    • <%@ taglib uri = &quot;/WEB-INF/tld/OrnekTag.tld“ prefix = &quot;gokhan&quot; %>
    • 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
  • 25. Örneğimizi geliştirelim
    • Basit bir etiketin nasıl kullanıldığını gördük.
    • Şimdi etikete ek özellikler ve gövde ekleyelim…
  • 26. TagIsleyici2.java
    • public 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;
    • }
    • }
  • 27. TagIsleyici2.java(2)
    • public int doStartTag() throws JspTagException{
    • try {
    • JspWriter out= pageContext .getOut();
    • out.println( &quot;<table border=&quot;5&quot;>&quot; );
    • if ( degiskenAdi != null )
    • out.print( &quot;<tr><td> Hello &quot; + degiskenAdi + &quot;</td></tr>&quot; );
    • else
    • out.println( &quot;<tr><td>Hello World! </td></tr>&quot; );
    • } catch (IOException e) {
    • throw new JspTagException ( “Hata!..&quot; + e);
    • }
    • return EVAL_BODY_TAG;
    • }
  • 28. 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!..&quot; +e);
    • }
    • return EVAL_BODY_TAG;
    • } else {
    • return SKIP_BODY ;
    • }
    • }
    • }
  • 29. TagIsleyici2.java(4)
    • public int doEndTag() throws JspTagException{
    • try {
    • JspWriter out = pageContext .getOut();
    • out.println( &quot;</table>&quot; );
    • } catch (Exception e) {
    • throw new JspTagException( “Hata!..&quot; +e);
    • }
    • return SKIP_BODY ;
    • }
  • 30.
    • 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.
  • 31. 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>
  • 32. OrnekTag2.jsp
    • <%@ page contentType = &quot;text/html&quot; %>
    • <%@ page pageEncoding = &quot;UTF-8&quot; %>
    • <%@ taglib uri = &quot;/WEB-INF/tld/OrnekTag.tld&quot; prefix = &quot;gokhan&quot; %>
    • < html >
    • < head >
    • < meta http-equiv = &quot;Content-Type&quot; content = &quot;text/html; />
    • < title > Ornek tag deneme </ title >
    • </ head >
    • < body >
    • < hr />
    • < gokhan:tagAdi degiskenAdi = &quot;angelina jolie&quot; yineleme = &quot;5&quot; >
    • < tr >< td >angelina jolie</ td ></ tr >
    • </ gokhan:tagAdi >
    • < hr />
    • </ body >
    • </ html >
  • 33. OrnekTag2.jsp nin html çıktısı
    • <html>
    • <head>
    • <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;>
    • <title>Ornek tag deneme</title>
    • </head>
    • <body>
    • <hr/>
    • <table border=&quot;5&quot;>
    • <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>
  • 34.
  • 35. 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.
  • 36. Ifade dilinde tanımlı değişlenler
    • pageContext: uygulama genelindeki değişkenler
    • param: parametreler
    • header: ServletRequest.getHeader(“ad”) = ${header.ad}
    • cookie: ${cookie.ad.value} adı verilen cookinin değerini çevirir
    • pageScope: sayfadaki değişkenler
    • requestScope: request nesnesindeki değişkenler
    • sessionScope: session daki değişkenler
    • applicationScope: uygulama genelindeki değişkenler
  • 37. JSTL-Java Standart Tag Library
    • Temel olarak 4 temel kütüphane vardır.
    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
  • 38. 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
  • 39. JSTL’i kullanmak için
    • http://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 = &quot;c&quot; uri = &quot;http://java.sun.com/jstl/core&quot; %>
    • Yukardaki uri ile çalışmayabiliyor, bu durumda
    • <%@ taglib prefix = &quot;c&quot; uri = &quot;http://java.sun.com/jstl/core_rt&quot; %>
    • Şeklinde kullanmayı deneyin.(diğer tag lar için de geçerli)
  • 40. OrnekJstl.jsp
    • <%@ taglib prefix = &quot;c&quot; uri = &quot;http://java.sun.com/jstl/core_rt&quot; %>
    • <%@ page contentType = &quot;text/html; charset=UTF-8&quot; %>
    • < html >
    • < head >
    • < title > JSTL </ title >
    • </ head >
    • < body >
    • < c:if test = &quot; ${9>8} &quot; >
    • < b > 9, 8'den büyüktür </ b >< br />
    • </ c:if >
    • < jsp:useBean id = &quot;renkler&quot; class = &quot;java.util.ArrayList&quot; />
    • <% renkler.add( &quot;red&quot; );
    • renkler.add( &quot;blue&quot; );
    • renkler.add( &quot;black&quot; );
    • renkler.add( &quot;green&quot; ); %>
    • < c:forEach var = &quot;renk&quot; items = &quot; ${renkler} &quot; >
    • < font color = &quot; ${renk} &quot; >< c:out value = &quot; ${renk} &quot; /></ font >
    • </ c:forEach >
    • </ body >
    • </ html >
  • 41. 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 = &quot;red&quot; > red </ font >
    • < font color = &quot;blue&quot; > blue </ font >
    • < font color = &quot;black&quot; > black </ font >
    • < font color = &quot;green&quot; > green </ font >
    • </ body >
    • </ html >
  • 42.  
  • 43. Sorular?