• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Java Server Page Custom Tag Oluşturmak

Java Server Page’de Custom Tag (Kullanıcı tanımlı etiket) oluşturmaktan bahsedeceğim. Java Server Page ile birlikte gelen bir çok çekirdek JSP etiketi mevcuttur. Aynı zamanda kullanıcı tanımlı etiket oluşturabilme özelliği ile birlikte ihtiyaca uygun etiketler yaratılabilir.

28.01.2014

Yazar: Batuhan Düzgün (Google+)

Kategori: Java

3866

Herkese merhaba arkadaşlar bu yazıda sizlere Java Server Page’de  Custom Tag (Kullanıcı tanımlı etiket) oluşturmaktan bahsedeceğim. Java Server Page ile birlikte gelen bir çok çekirdek JSP etiketi mevcuttur. Aynı zamanda kullanıcı tanımlı etiket oluşturabilme özelliği ile birlikte ihtiyaca uygun etiketler yaratılabilir.

JSP kullanıcı tanımlı etiketler arkaplanda bir Servlet’e dönüştürülür. Kullanıcı tanımlı etiketler JSP 2.0 ile birlikte “SimpleTagSupport” sınıfı ile desteklenmektedir. JSP tarafında tanımlanacak olan kullanıcı tanımlı etiketler aynı zamanda “SimpleTagSupport” sınıfından kalıtım almış olan bir sınıf ile birlikte tanımlanırlar.

 

Kullanıcı Tanımlı Etiket Oluşturma Adımları

* Kullanıcı tanımlı etiket için XML formatında “.tld” uzantılı bir dosya tanımlanır.

* “SimpleTagSupport” sınıfından kalıtım almış olan bir sınıf tanımlanır.

 

Dynamic Web Project

Eclipse yardımıyla yeni bir Dynamic Web Project oluşturulur. Hemen ardından CustomTags isminde bir klasör WebContent klasörü altına oluşturulur. Bu klasör içinde kullanıcı tanımlı etiketlerin XML formatındaki dosyaları tutulur. 

 

“SqlSelect.tld” XML Dosyası Tanımı

Bu XML dosyası ile birlikte kullanıcı tanımlı etiketin özellikleri belirtilir. Aşağıda açıklama satırları halinde ne işe yaradıkları açıklanmıştır.

<?xml version="1.0" encoding="UTF-8"?>
<taglib>
  <tlib-version>1.0</tlib-version>
  <!-- JSP versiyonu belirtilir. -->
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD with Body</short-name>
  <tag>
    <!-- Kullanici tanimli etiketin ismidir. -->
    <name>SqlSelect</name>
    <!-- Kullanici tanimli etiketin hangi Java sinifiyla calisacagi belirtilir. -->
    <tag-class>customtags.SqlSelect</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
       <!-- Kullanici tanimli etiketin 'sql' isminde bir attribute barindiracagi belirtilir. -->
       <name>sql</name>
    </attribute>
  </tag>
</taglib>

 

“SqlSelect” Java Sınıfının Tasarlanması

“SqlSelect” isimli Java sınıfı kullanıcı tanımlı etiketin kullanacağı sınıftır. Kullanıcı tanımlı etiket kullanıldığında bu sınıf içinde yazılmış olan kodlar işletilecektir. “SimpleTagSupport” sınıfından kalıtım almış olan sınıf içinde “doTag” isimli metod override edilir. Böylece, kullanıcı tanımlı etiket kullanıldığında “doTag” isimli metod çağrılıp işletilecektir.

 

package customtags;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import entities.Person;

public class SqlSelect extends SimpleTagSupport {

	private String sql;
	
	public void setSql(String sql) {
		this.sql = sql;
	}
	
	public String getSql() {
		return this.sql;
	}
	
	//Etiket kullanildiginda ilk olarak doTag isimli metod kullanilacaktir.
	@Override
	public void doTag() throws JspException, IOException {
		
		// Person tablosundaki tum kayitlar alinir. Bu kayitlar Person tipindeki POJO sinifi listesi halinde verilir.
		List<Person> list = getAllPersons();
		// JSP sayfasinin Context'inde yer alan JspWriter tipindeki nesne alinir.
		JspWriter jspWriter = getJspContext().getOut();
		
		// Iterator yardimiyla tum kayitlar satir satir out nesnesi yardimiyla sayfaya yazdirilir.
		for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
			Person person = (Person) iterator.next();
			String record = person.getName() + " - " + person.getSurName() + " - " + person.getAge();
			jspWriter.println(record + "<br/>");
		}
	}
	
	// JPA kullanilarak tum kayitlar veritabanindan cekilir.
	public List<Person> getAllPersons() {
		
		// EntityFactoryManager ile persistence.xml dosyasindaki persistence unit secilir ve ayarlar okunur.
		EntityManagerFactory entitymanagerfactory = Persistence.createEntityManagerFactory("test.mysql");
		// EntityManager olusturulur.
		EntityManager entityManager = entitymanagerfactory.createEntityManager();
		
		// CriteriaBuilder vasitasiyla Query olusturulur. Native SQL cumlesi calistirilir ve sorgu sonucu liste halinde alinir.
		List<Person> persons = entityManager.createNativeQuery(getSql(), Person.class).getResultList();
		return persons;
	}
}

 

Yukarıdaki kullanıcı tanımlı etiket sınıfında native SQL cümlesi çalıştırılır ve kayıtlar kümesi sayfa üzerinde gösterilir. Çalıştırılmak istenen Native SQL cümlesi kullanıcı tanımlı etiketin “sql“ attribute’ne girilir. Attribute aracılığıyla gelen SQL cümlesi sınıf içinde işletilir.

“SqlSelect” sınıfı içinde sql isminde String tipte bir değişken tanımlanır. Bu değişken kullanıcı tanımlı etiketin attribute olur. Bu değişkenin get ve set metodları mutlaka olmalıdır. Kullanıcı tanımlı etiketin “sql” ismindeki attribute’na SQL ifadesi atanabilmesi için mutlaka get-set metodlarının tanımlı olması gereklidir. Aksi halde uygulama hata verecektir.

 

Projeye JPA Entegrasyonu

Veritabanı ile ilgili işlemleri JPA sorumluğuna bırakılacaktır. O  nedenle JPA ile ilgili JAR dosyalarının projeye dahil edilmesi gerekir. “WEB-INF” klasörü altındaki “lib” klasörüne aşağıdaki gibi JAR dosyaları eklenir.

 

Person POJO Sınıfı Tasarımı

package entities;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@SuppressWarnings("serial")
//Entity ismi verilir.
@Entity(name="Person")
//Veritabani tarafinda olusturulacak olan tablonun ismi belirtilir.
@Table(name="Person", schema="test")
//Sinifa Serializable ozelligi verilir.
public class Person implements Serializable {
	
	// Id etiketi ile primary key kolon olacagi belirtilir.
	@Id
	// Id kolonunun otomatik artan bir alan olacagi belirtilir.
	@GeneratedValue(strategy=GenerationType.AUTO)
	// Tablo icindeki kolon ismi belirtilir.
	@Column(name="id")
	private Long id;
	
	// Kolon ismi ve karakter uzunlugu belirtilir.
	@Column(name="person_name", length=60)
	private String name;
	
	// Kolon ismi ve karakter uzunlugu belirtilir.
	@Column(name="person_surnam", length=60)
	private String surName;
	
	//Kolon ismi ve karakter uzunlugu belirtilir.
	@Column(name="person_age")
	private Integer age;

	// Tum get ve set metodlari olusturulur.
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurName() {
		return surName;
	}

	public void setSurName(String surName) {
		this.surName = surName;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

 

Persistence XML Dosyasının Oluşturulması

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

	<persistence-unit name="test.mysql" transaction-type="RESOURCE_LOCAL">
		<!-- Kullanilacak olan POJO siniflari tam ismiyle birlikte <class> etiketleri arasina yerlestirilir.  -->
		<class>entities.Person</class>
		<properties>
			<!-- 
			
			Veritabanina baglanti cumlesi, kullanici adi ve sifre,
			POJO siniflarinin veritabanina tablolarina donusturulup donusturulmeyecegi gibi bir cok ayarlama yapilir.
			-->
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
			<property name="javax.persistence.jdbc.password" value=""/>
			<property name="javax.persistence.jdbc.user" value="root"/>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
			<property name="eclipselink.ddl-generation" value="create-tables" /> 
			<!-- -create table, drop and create table, none -->
			<property name="eclipselink.ddl-generation.output-mode" value="database" />
			<!-- 
				Bazi veritabanlarinda kolon isimlerini kucuk oldugu halde tamamini buyuk harfli getirir.
				Native SQL sorgulamalarinda veritabanina bagli olarak uppercase-column-names ozelligi true olarak setlenmelidir.
				Boylece, JPA uzerinden yapilan Native SQL sorgularinda primary key can not be null hatasindan kacinilir.
			-->
			<property name="eclipselink.jpa.uppercase-column-names" value="true"/>
		</properties>
	</persistence-unit>

</persistence>

 

Konfigürasyon dosyasında dikkat edilmesi gereken ayrı bir detay bulunmaktadır. JPA ile Native SQL çalıştırılmaya çalışıldığında “Primary Key must not contain null” hatası almamak için “eclipselink.jpa.uppercase-column-names” özelliği true olarak setlenmelidir. Çünkü, JPA native SQL çalıştırırken bazı veritabanları standart olarak kolon isimlerinin tümünü büyük harfle yazabilir. Bu nedenle böyle bir hata almamak için bu özellik true olarak değiştirilmelidir.

Hata Görüntüsü :

 

JSP Sayfasında SqlSelect İsimli Etiketin Kullanımı

Son adım olarak tanımlı olan etiketi JSP sayfasında kullanacağız. JSP sayfası eklenir ve aşağıdaki gibi kullanılır. Etiketin prefix (ön takısına) kısmına “batux” yazılır. Aşağıdaki gibi JSP sayfasına include edilir.

<%@ taglib prefix="batux" uri="CustomTags/SqlSelect.tld"%>

uri özelliğine ise LTD dosyasının yolu verilir.

 

JSP Sayfası 

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<%@ taglib prefix="batux" uri="CustomTags/SqlSelect.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=US-ASCII">
<title>Insert title here</title>
</head>
<body>

<batux:SqlSelect sql="SELECT * FROM test.Person" />

</body>
</html>

 

Çalıştırılması istenen SQL cümlesi yukarıdaki gibi verilir. Uygulama çalıştırıldığında sonuçlar aşağıdaki gibi olacaktır.

Umarım yararlı bir yazı olmuştur. Bir sonraki makalemde görüşmek dileğiyle …

Batuhan Düzgün

Bilgisayar Mühendisi

Endüstri Mühendisi

Yazar Hakkında

Batuhan Düzgün

Batuhan Düzgün

www.batuhanduzgun.net

1988 Akhisar doğumludur. Sakarya Üniversitesi Bilgisayar Mühendisliği ve Endüstri Mühendisliği bölümlerinden 2011 yılında mezun olmuştur. Eskisehir OsmanGazi Universitesi'nde Endustri Muhendisligi Tezli Yuksek Lisansi programinda ogrenim yasantisina devam etmektedir. 1 senedir aktif çalışma hayatı içindedir. Mobil Teknolojiler, GSM Ağları, Bilgisayar Ağları, TCP/IP, Ethernet, HTTP, SMPP protokolleri, .NET ile yazılım geliştirme, veritabanı yönetim sistemleri ve Java gibi bir çok konuda çalışma ve proje gerçekleştirmiştir. Son zamanlarda özellikle Kurumsal Java konusuna çalışmaktadır.

Sosyal Medya

ORANLAR

  • 3866izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120152
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65269
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48392
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ