JSP Ders04 - JSP Direktifleri



   JSP’de 3 çeşit direktif vardır. Bu direktifler web containera jsp sayfalarının servlet sayfalarına nasıl dönüştürüleceğini söyler.
  • Page direktifi
  • Include direktifi
  • Taglib direktifi
Page direktifleri tüm sayfa boyunca kabul edilen attributeleri tanımlar.
Birçok page direktifi vardır.
import,contentType,extends,info,buffer,language,isELIgnored,isThreadSafe,autoFlush,session,pageEncoding,errorPage,isErrorPage

import attributeü java SE’daki gibidir.Sayfaya sınıf,inteface(arayüz) veya tüm paket üyelerini eklemeye yarar.

Örnek Kullanılışı
  <html> 
    <body>
    <%@ page import="test.Personel" %>
     <%= new Personel(enes).yazdir()%> 
    </body> 
  </html>  

contentType attributeü http responseun mıme(Multipurpose Internet Mail Extension) tipini belirler.

Örnek kullanılışı 
<html>  
    <body>  
    
    <%@ page contentType=text/html %>      

    <%@ page import="test.Personel" %>
  
     <%= new Personel(enes).yazdir() %>  
      
    </body>  
 </html>  

Extends attributeü kalıtım amaçlı seyrek bir kullanımı vardır.
İnfo attiributeü basitçe JSP sayfa bilgisini setler.

Örnek kullanılışı 
<html>  
<body>    
<%@ page info="Baslangic Sayfasi" %>  
</body>  
</html>

Yukarıdaki şekilde kullanıldığında web container geriye “Baslangic Sayfasi” döndürecek string tipinde getServletInfo() adında bir metot oluşturur.

Buffer attributeü JSP sayfa ile üretilen çıkışın boyutunu verir. Default değer 8 kbtır.

Örnek kullanılışı
<html>  
  <body>  
      
    <%@ page buffer="16kb" %>  
    Bugün : <%= new java.util.Date() %>  
      
  </body>  
</html>  

Language attributeü JSP sayfanın dilini belirtir.Default değeri javadır.

isELIgnored attributeü ifade dilini (expression language) engellemek için kullanılır.Default değeri falsetur.

Kullanılışı
<%@ page isELIgnored="true" %>

isThreadSafe attributeü JSP sayfanın multithread özelliğini değiştirmek için kullanılır. Default değeri truedur.Eğer false yapılırsa , bir http isteiğine cevap üretilmeden diğer isteğe geçilmez.

Kullanılışı
<%@ page isThreadSafe="false" %>

errorPage attributeü hata sayfası tanımlamak için kullanılır.Eğer geçerli sayfada bir exception meydana gelirse sayfa hata sayfasına yönlendirilir.

Örnek kullanışı
<html>  
<body>  
  
<%@ page errorPage="hataSayfasi.jsp" %>  
  
 <%= 4/0 %>  
  
</body>  
</html>  

isErrorPage attributeü o sayfanın hatayı işlediğini belirtir.

Örnek kullanışı
<html>  
<body>  
  
<%@ page isErrorPage="true" %>  
  
 <%= "hata : "+exception %>  
  
</body>  
</html>  

include direktifi herhangi bir kaynaktan jsp sayfasına içerik eklemeye yarar.

Örnek kullanılışı
<html>  
<body>  
  
<%@ include file="menu.html" %>  

<%="Hosgeldiniz"%>
  
</body>  
</html>  

Taglib direktifi tag tanımlamaya yarar.

Projelerde kullanabilmek için javax-servlet.jar dosyasını projenize eklemeyi unutmayın.
Tag 2 şekilde tanımlanabilir.
  • Java tabanlı tag olarak
  • JSP tabanlı tag olarak
Java tabanlı tag örneği
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="t" uri="WEB-INF/tagcim.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>index.jsp</title>
</head>
<body>
 <t:tagim></t:tagim> 
 <hr/>
 <t:tagim mesaj="merhaba"></t:tagim> 
 <hr/>
 <t:tagim>enes</t:tagim> 
 <hr/>
 <t:tagim mesaj="merhaba">enes</t:tagim> 
 <hr/>
</body>
</html>
         
Tagcim.java
package test;

import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.*;

public class Tagcim extends SimpleTagSupport {
 private String mesaj;

 public void setMesaj(String mesaj) {
  this.mesaj = mesaj;
 }

 public String getMesaj() {
  return mesaj;
 }

 StringWriter sw = new StringWriter();

 public void doTag() throws JspException, IOException {
  PageContext context = (PageContext) getJspContext();
  HttpServletRequest request = (HttpServletRequest) context.getRequest();

  JspWriter out = getJspContext().getOut();
  if (mesaj == null) { // attribute girilmediyse
   out.println("Mesajiniz : " + "yok <br/>");
  } else {
   out.println("Mesajiniz : " + mesaj + "<br/>");
  }
  
  if (getJspBody() == null) { // tag gövdesi boşsa
   out.println("Tag govdesi : bos");
  }
  else{
   out.println("Tag govdesi :");
   getJspBody().invoke(null);
  }

 }
}

Tagcim.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>tagornek</short-name>

  <tag>
    <name>tagim</name>
    <tag-class>test.Tagcim</tag-class>
    <body-content>scriptless</body-content> 
     <attribute>
       <name>mesaj</name>
       <required>false</required>
     </attribute>
  </tag>
 
</taglib>


<!-- <body-content> empty ise body boş , 
scriptless ise body dolu veya boş yapılabilir.-->

 
JSP Directives




JSP tabanlı örnek

JSP tabanlı kullanım daha kolaydır.İlk olarak .tld dosyası yerine .tag dosyası kullanıyoruz ve tag dosyasının içine sadece attributeleri koyuyoruz. WEB-INF altına tags klasörünü oluşturup .tag dosyasını oluşturduğumuz klasörün içine atıyoruz.

<%@ taglib prefix="t" uri="WEB-INF/tagcim.tld"%>
<%@ taglib prefix="t" tagdir="WEB-INF/tags"%>

Uri etiketi yerine tagdir etiketi kullanıyoruz.
Java tabanlı tag kullanımında Prefix:tagIsmi şeklinde kullanılır,
JSP tabanlı taglarda ise , prefix:tagDosyasıIsmi şeklide kullanılır.

index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%>
<!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>index.jsp</title>
</head>
<body>
 
 <t:tagcim></t:tagcim> 
 <hr/>
 <t:tagcim mesaj="merhaba"></t:tagcim> 
 <hr/>
 <t:tagcim>enes</t:tagcim> 
 <hr/>
 <t:tagcim mesaj="merhaba">enes</t:tagcim> 
 <hr/>
</body>
</html>

Tagcim.tag
<%@ attribute name="mesaj" required="false" %>

<%= "Mesajiniz : "%><%=mesaj %>
<%= "<br/>Tag Govdesi : "%><jsp:doBody/>

JSP Directives

Yorumlar

Bu blogdaki popüler yayınlar

Java SE Ders24 - Composition (Kompozisyon)

Spring Ders20 - Aspect Oriented Programming - AspectJ Annotation Style

JSF Ders30 - Page Template (Sayfa Şablonu)