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
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>
Ö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 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.
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/>
Yorumlar
Yorum Gönder