JSP (JavaServer Pages) Nedir? Yeni Başlayanlar İçin Kapsamlı Bir JSP Eğitimi
JSP (JavaServer Pages), Java platformunda dinamik web içeriği oluşturmak için kullanılan bir teknolojidir. Temel olarak, HTML veya XML gibi statik içerikleri Java koduyla birleştirerek, sunucu tarafında işlenen ve istemciye gönderilen dinamik web sayfaları üretmenizi sağlar. Bu makale, JSP’nin temellerini, söz dizimini, önemli özelliklerini ve modern web geliştirme bağlamındaki yerini yeni başlayanlar için anlaşılır bir dille açıklamayı hedeflemektedir.
Giriş: JSP Dünyasına Adım Atın
Web siteleri, iki ana türde içerik sunar: statik ve dinamik. Statik içerik, her kullanıcıya aynı şekilde görünen, önceden tanımlanmış sayfalardır (örneğin, bir şirketin “Hakkımızda” sayfası). Dinamik içerik ise kullanıcıya veya zamana göre değişen bilgiler sunar (örneğin, kişiselleştirilmiş bir profil sayfası, bir arama motoru sonuçları sayfası veya güncel hava durumu bilgileri). İşte JSP, bu dinamik içeriği oluşturmanın güçlü ve esnek bir yolunu sunar.
JSP sayfaları, aslında özel etiketler ve Java kod parçacıkları (scriptlet’lar) içeren metin tabanlı belgelerdir. Bir JSP sayfası sunucuya ulaştığında, özel bir işlemden geçirilerek bir Java Servlet’ine dönüştürülür, derlenir ve çalıştırılır. Bu Servlet, isteği işler, veritabanından bilgi alır, hesaplamalar yapar ve sonuçları HTML formatında geri döndürür. Bu sayede, tarayıcıya sadece nihai HTML içeriği ulaşır ve kullanıcı dinamik bir deneyim yaşar.
JSP’nin temel amacı, sunum katmanını (HTML/CSS) iş mantığından (Java kodu) ayırmaya yardımcı olmaktır. Geleneksel olarak, dinamik web sayfaları oluşturmak için doğrudan Java Servlet’leri kullanılabilirdi. Ancak Servlet’ler içinde HTML kodu yazmak oldukça zahmetli ve okunaksız olabiliyordu. JSP, HTML kodunun içine Java kodunu gömmeyi kolaylaştırarak bu süreci basitleştirir ve web tasarımcılarının ve geliştiricilerin işbirliğini artırır.
Ön Gereksinimler ve Geliştirme Ortamı Kurulumu
JSP öğrenmeye başlamadan önce bazı temel bilgilere ve araçlara ihtiyacınız olacak.
Temel Bilgiler
* Java Programlama Dili Temelleri: Değişkenler, veri tipleri, döngüler, koşullu ifadeler, sınıflar ve nesneler gibi temel Java kavramlarına aşina olmanız gerekmektedir. JSP, temelde Java kodu kullandığı için bu bilgi olmazsa olmazdır.
* HTML ve CSS Temelleri: Web sayfalarının yapısını ve stilini anlamak için HTML ve CSS bilgisi önemlidir. JSP, HTML çıktısı ürettiği için bu dilleri bilmek, oluşturduğunuz sayfaların düzenini ve görünümünü kontrol etmenizi sağlar.
* Web Kavramları: HTTP istek/yanıt döngüsü, sunucu ve istemci arasındaki iletişim gibi temel web kavramlarına aşinalık faydalı olacaktır.
Gerekli Araçlar
* JDK (Java Development Kit): Java uygulamalarını derlemek ve çalıştırmak için gereklidir.
* IDE (Entegre Geliştirme Ortamı): Kod yazmayı, derlemeyi ve hata ayıklamayı kolaylaştıran bir yazılımdır. En popüler seçenekler arasında Eclipse (özellikle EE sürümü veya WTP eklentisi ile) ve IntelliJ IDEA bulunmaktadır. Bu makalede Eclipse üzerinden örnekler verilecektir.
* Servlet Konteyneri (Web Sunucusu): JSP sayfalarını ve Servlet’leri çalıştırmak için gereklidir. Apache Tomcat, en yaygın ve yeni başlayanlar için ideal bir seçimdir.
Ortam Kurulumu Adımları (Eclipse Örneği ile)
1. JDK Kurulumu: Oracle web sitesinden veya OpenJDK dağıtımlarından (örneğin Adoptium) işletim sisteminize uygun JDK sürümünü indirip kurun. Kurulumdan sonra JAVA_HOME ortam değişkenini ayarladığınızdan emin olun.
2. Eclipse Kurulumu: Eclipse IDE for Enterprise Java and Web Developers sürümünü Eclipse resmi web sitesinden indirin ve kurun. Bu sürüm, web projesi geliştirmek için gerekli tüm araçları (WTP – Web Tools Platform) içerir.
3. Apache Tomcat Kurulumu: Apache Tomcat’in resmi web sitesinden (tomcat.apache.org) en son kararlı sürümünü (örneğin Tomcat 9 veya 10) indirin. İndirdiğiniz zip dosyasını sisteminizde kolayca erişebileceğiniz bir yere (örneğin C:\apache-tomcat-9.0.x veya /opt/tomcat) açın.
4. Tomcat’i Eclipse’e Entegre Etme:
* Eclipse’i açın.
* Window -> Show View -> Servers menüsüne gidin.
* Servers görünümünde sağ tıklayın, New -> Server seçeneğini seçin.
* Apache altında, indirdiğiniz Tomcat sürümünü seçin (örneğin Tomcat v9.0 Server).
* Next düğmesine tıklayın.
* Tomcat installation directory alanında, Tomcat’i açtığınız klasörün yolunu gösterin.
* Finish düğmesine tıklayın. Artık Eclipse, Tomcat sunucunuzu tanıyor.
5. Yeni Bir Dinamik Web Projesi Oluşturma:
* File -> New -> Dynamic Web Project seçeneğini seçin.
* Projenize bir isim verin (örneğin IlkJSPProjem).
* Target Runtime olarak az önce yapılandırdığınız Tomcat sunucunuzu seçin.
* Dynamic web module version olarak genellikle en yüksek sürümü (örneğin 4.0 veya 5.0) seçebilirsiniz.
* Context root varsayılan olarak projenizin adıdır (/IlkJSPProjem).
* Generate web.xml deployment descriptor seçeneğini işaretli bırakın.
* Finish düğmesine tıklayın.
İlk JSP Sayfanızı Oluşturma ve Çalıştırma
Projenizi oluşturduktan sonra, WebContent (veya src/main/webapp Maven projesi ise) klasörü altında JSP sayfalarınızı oluşturacaksınız.
1. index.jsp Oluşturma:
* WebContent klasörüne sağ tıklayın, New -> JSP File seçeneğini seçin.
* Dosya adını index.jsp olarak belirleyin ve Finish düğmesine tıklayın.
2. Basit Bir “Merhaba Dünya” JSP Kodu:
index.jsp dosyanızın içeriğini aşağıdaki gibi değiştirin:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
İlk JSP Sayfam
Bu benim ilk JSP sayfam.
<%
// Bu bir JSP scriptlet'ıdır. Java kodu içerir.
String mesaj = "JSP ile dinamik içerik!";
out.println("" + mesaj + "
");
%>
Şu anki zaman: <%= new java.util.Date() %>
3. Projenizi Tomcat Üzerinde Çalıştırma:
* Servers görünümünde, yapılandırdığınız Tomcat sunucunuza sağ tıklayın ve Add and Remove... seçeneğini seçin.
* Sol taraftaki Available listesinden projenizi (IlkJSPProjem) seçip Add > düğmesine tıklayarak sağ taraftaki Configured listesine taşıyın.
* Finish düğmesine tıklayın.
* Servers görünümünde Tomcat sunucunuza sağ tıklayın ve Start seçeneğini seçin.
* Tarayıcınızda http://localhost:8080/IlkJSPProjem/index.jsp adresine gidin.
* “Merhaba Dünya!” mesajını, “JSP ile dinamik içerik!” mesajını ve güncel zamanı görmelisiniz.
JSP Temel Söz Dizimi ve Yapı Taşları
JSP, HTML içine Java kodu gömmek için çeşitli özel etiketler ve yapı taşları kullanır.
JSP Sayfa Direktifi (page Directive)
JSP sayfasının en üstünde yer alan bu direktif, sayfanın genel özelliklerini tanımlar.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
* language: Kullanılan betik dilini belirtir (varsayılan olarak java).
* contentType: Sayfanın içerik türünü ve karakter kodlamasını belirtir (tarayıcıya ne tür bir içerik gönderildiğini söyler).
* pageEncoding: JSP dosyasının karakter kodlamasını belirtir.
* import: Java sınıflarını içe aktarmak için kullanılır, tıpkı Java’daki import ifadesi gibi. Örneğin: <%@ page import="java.util.Date, java.util.ArrayList" %>.
* errorPage: Bu sayfada bir hata oluştuğunda yönlendirilecek hata sayfasının URL’sini belirtir.
* isErrorPage: Bu sayfanın bir hata sayfası olup olmadığını belirtir (true ise exception gizli nesnesi kullanılabilir).
JSP Scriptlet’lar (<% ... %>)
Scriptlet’lar, JSP sayfasında doğrudan Java kodu çalıştırmanıza olanak tanır. Bu kod, Servlet’in _jspService() metodu içinde yer alır.
<%
// Bu bir Java yorumudur
int sayi1 = 10;
int sayi2 = 20;
int toplam = sayi1 + sayi2;
out.println("Sayıların toplamı: " + toplam + "
");
for (int i = 0; i < 3; i++) {
out.println("Döngü Adımı: " + (i + 1) + "
");
}
%>
UYARI: Scriptlet’lar, özellikle karmaşık iş mantığı içerdiğinde, JSP sayfalarının okunabilirliğini ve bakımını zorlaştırır. Modern JSP geliştirmede JSTL ve EL gibi daha iyi alternatifler bulunduğundan, scriptlet kullanımından kaçınılması şiddetle tavsiye edilir. MVC (Model-View-Controller) prensibi gereği, iş mantığı JSP (View) katmanında değil, Servlet (Controller) veya Java sınıflarında (Model) olmalıdır.
JSP İfadeleri (<%= ... %>)
İfadeler, bir Java değişkeninin veya ifadenin değerini doğrudan HTML çıktısına yazdırmak için kullanılır. out.print() veya out.println() kullanmaya gerek kalmaz.
<%
String kullaniciAdi = "Ali Can";
%>
Hoş geldiniz, <%= kullaniciAdi %>!
Bugünün tarihi: <%= new java.util.Date() %>
2 + 3 = <%= 2 + 3 %>
JSP Bildirimleri (<%! ... %>)
Bildirimler, JSP sayfasının dönüştürüldüğü Servlet sınıfının içinde, sınıf seviyesinde değişkenler ve metodlar tanımlamak için kullanılır. Bu, tüm istekler arasında paylaşılan (veya yeniden kullanılan) kaynaklar oluşturmak için kullanılabilir, ancak dikkatli olunmalıdır çünkü iş parçacığı güvenliği sorunlarına yol açabilir.
<%!
// Bu bir sınıf değişkeni
private int sayac = 0;
// Bu bir sınıf metodu
public String getSelamlama(String isim) {
return "Merhaba, " + isim + "!";
}
%>
Sayfa ziyaret sayısı: <%= ++sayac %>
<%= getSelamlama("Ayşe") %>
JSP Yorumları (<%-- ... --%>)
JSP yorumları, sunucu tarafından işlenmez ve istemciye gönderilen HTML çıktısında görünmez. Bu, kodunuzu belgelendirmek için kullanışlıdır.
<%-- Bu bir JSP yorumudur. Tarayıcıda görünmeyecektir. --%>
Bu metin görünecektir.
JSP’nin Önemli Gizli Nesneleri (Implicit Objects)
JSP, geliştiricilere hazır olarak sunulan ve her JSP sayfasında otomatik olarak erişilebilen dokuz adet “gizli nesne” sağlar. Bu nesneler, web uygulamalarında sıkça kullanılan işlevlere kolay erişim sağlar. En önemlileri şunlardır:
request Nesnesi
request nesnesi, istemciden gelen HTTP isteği hakkında bilgilere erişim sağlar. Kullanıcının gönderdiği form verileri, URL parametreleri, HTTP başlıkları gibi bilgilere bu nesne aracılığıyla ulaşılır.
* request.getParameter("parametreAdi"): Formdan veya URL’den gelen bir parametrenin değerini alır.
* request.setAttribute("anahtar", deger): İsteğe bir nesne ekler.
* request.getAttribute("anahtar"): İsteğe eklenmiş bir nesneyi alır.
<%-- form.html (veya index.jsp'de bir form) --%>
<%-- sonuc.jsp --%>
<%
String ad = request.getParameter("ad");
String yasStr = request.getParameter("yas");
int yas = 0;
if (yasStr != null && !yasStr.isEmpty()) {
yas = Integer.parseInt(yasStr);
}
%>
Merhaba, <%= ad %>!
Yaşınız: <%= yas %>
response Nesnesi
response nesnesi, sunucunun istemciye geri göndereceği HTTP yanıtını yönetmek için kullanılır.
* response.sendRedirect("yeniSayfa.jsp"): İstemciyi başka bir URL’ye yönlendirir.
<%
// Kullanıcı doğrulanmadıysa giriş sayfasına yönlendir
boolean dogrulandi = false; // Gerçekte bir kontrol mekanizması olur
if (!dogrulandi) {
response.sendRedirect("giris.jsp");
}
%>
session Nesnesi
session nesnesi, bir kullanıcının birden fazla istek boyunca süren oturum bilgilerini saklamak için kullanılır. Oturumlar, kullanıcı girişi, alışveriş sepeti gibi durumları takip etmek için önemlidir.
* session.setAttribute("anahtar", deger): Oturuma bir nesne ekler.
* session.getAttribute("anahtar"): Oturumdan bir nesneyi alır.
* session.invalidate(): Oturumu sonlandırır.
<%
String kullaniciAdi = (String) session.getAttribute("kullaniciAdi");
if (kullaniciAdi == null) {
session.setAttribute("kullaniciAdi", "Misafir");
kullaniciAdi = "Misafir";
}
%>
Oturumdaki kullanıcı: <%= kullaniciAdi %>
application Nesnesi
application nesnesi, tüm web uygulaması için geçerli olan ve tüm kullanıcılar tarafından paylaşılan bilgileri saklamak için kullanılır. Uygulama başlatıldığında oluşturulur ve uygulama durduğunda yok edilir.
* application.setAttribute("anahtar", deger)
* application.getAttribute("anahtar")
out Nesnesi
out nesnesi, JSP sayfasının çıktısını doğrudan istemciye yazmak için kullanılır. out.print() ve out.println() metodları vardır. JSP ifadeleri (<%= ... %>) aslında out.print() metodunu kullanarak çalışır.
<%
out.println("");
%>
Diğer gizli nesneler: pageContext (sayfa bağlamı bilgisi), config (Servlet yapılandırma bilgisi), page (geçerli JSP Servlet örneği), exception (hata sayfalarında hata nesnesi).
JSP Direktifleri (Directives)
Direktifler, JSP motoruna sayfanın nasıl işleneceği hakkında bilgi veren özel talimatlardır. Daha önce page direktifini görmüştük. Diğer önemli direktifler şunlardır:
include Direktifi (<%@ include file="..." %>)
include direktifi, başka bir dosyanın içeriğini (JSP, HTML, metin) statik olarak, yani JSP sayfası derlenmeden önce, geçerli sayfaya dahil etmek için kullanılır. Bu, ortak başlıklar, alt bilgiler veya navigasyon menüleri gibi tekrar eden sayfa bölümlerini yönetmek için kullanışlıdır.
<%-- header.jspf (örneğin) --%>
<%-- index.jsp --%>
<%@ include file="header.jspf" %>
Ana sayfa içeriği burada.
<%@ include file="footer.jspf" %>
taglib Direktifi (<%@ taglib uri="..." prefix="..." %>)
taglib direktifi, JSP sayfalarında özel etiket kütüphanelerini (JSTL gibi) veya kendi özel etiketlerinizi kullanmak için gereklidir. Bu direktif, etiket kütüphanesinin konumunu (URI) ve bu kütüphanedeki etiketleri kullanmak için bir ön ek (prefix) tanımlar.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%-- Artık , gibi JSTL etiketlerini kullanabiliriz --%>
JSP Standart Eylemleri (Standard Actions)
JSP standart eylemleri, XML söz dizimine sahip etiketlerdir ve JSP motoruna belirli görevleri yerine getirmesini söyler. şeklinde kullanılırlar.
Bu eylem, başka bir JSP sayfasının veya kaynağının çıktısını çalışma zamanında (run-time) geçerli sayfaya dahil eder. <%@ include %> direktifinden farklı olarak, dahil edilen sayfa bağımsız olarak derlenir ve çalıştırılır. Bu, dinamik içerik eklemek için daha esnektir.
<%-- index.jsp --%>
Bu ana sayfa içeriği.
Ana sayfanın kalan kısmı.
<%-- dinamikKisim.jsp --%>
Bu kısım dinamik olarak eklendi. Şu anki saat: <%= new java.util.Date() %>
Bu eylem, istemcinin isteğini sunucu tarafında başka bir JSP sayfasına veya Servlet’e yönlendirir. Tarayıcıya yeni bir URL gönderilmez; yönlendirme sunucu içinde gerçekleşir.
<%-- giris.jsp --%>
<%
boolean dogrulandi = true; // Doğrulama başarılıysa
if (dogrulandi) {
// Doğrulama başarılı, ana sayfaya yönlendir
jsp:forward page="anasayfa.jsp" />
} else {
// Doğrulama başarısız, hata mesajı göster
%>
Kullanıcı adı veya şifre yanlış.
<%
}
%>
Bu eylem, veya eylemleriyle birlikte kullanılarak, yönlendirilen veya dahil edilen sayfaya ek parametreler göndermek için kullanılır.
<%-- selamlama.jsp --%>
<%= request.getParameter("mesaj") %>, <%= request.getParameter("isim") %>!
, ,
Bu eylemler, JavaBeans ile çalışmayı kolaylaştırır. JavaBeans, basit Java sınıflarıdır ve JSP’de veri taşımak veya iş mantığını kapsüllemek için kullanılır.
* : Belirtilen sınıftan bir JavaBean örneği oluşturur veya mevcut bir örneği bulur. scope özniteliği, bean’in hangi kapsamda (page, request, session, application) saklanacağını belirler.
* : Bir JavaBean’in özelliğini ayarlar.
* : Bir JavaBean’in özelliğinin değerini alır.
// src/main/java/com/example/model/Kullanici.java
package com.example.model;
public class Kullanici {
private String ad;
private int yas;
public String getAd() { return ad; }
public void setAd(String ad) { this.ad = ad; }
public int getYas() { return yas; }
public void setYas(int yas) { this.yas = yas; }
}
<%-- index.jsp --%>
Kullanıcı Adı:
Kullanıcı Yaşı:
Pratik Bir JSP Örneği: Kullanıcı Girişi ve Sonuç Sayfası
Şimdi öğrendiklerimizi kullanarak basit bir kullanıcı giriş formu ve sonuç sayfasını oluşturalım.
index.jsp (Giriş Formu)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Kullanıcı Girişi
Kullanıcı Giriş Formu
islem.jsp (İşlem ve Sonuç Sayfası)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Giriş Sonucu
Giriş Sonucu
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
// Basit bir doğrulama (gerçek uygulamada veritabanı kontrolü yapılır)
if ("admin".equals(username) && "12345".equals(password)) {
// Oturuma kullanıcı adını kaydet
session.setAttribute("loggedInUser", username);
%>
Hoş geldiniz, <%= username %>!
Giriş başarılı. Ana Sayfaya Git
<%
} else {
%>
Kullanıcı adı veya şifre yanlış.
<%
}
%>
anasayfa.jsp (Giriş Yapmış Kullanıcı İçin Sayfa)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Ana Sayfa
Ana Sayfa
<%
String loggedInUser = (String) session.getAttribute("loggedInUser");
if (loggedInUser != null) {
%>
Merhaba, <%= loggedInUser %>! Bu, giriş yaptıktan sonraki ana sayfanız.
<%
} else {
%>
Giriş yapmadınız. Giriş Yapmak İçin Tıklayın
<%
}
%>
cikis.jsp (Çıkış Sayfası)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Çıkış Yapıldı
Çıkış Yapıldı
<%
session.invalidate(); // Oturumu sonlandır
%>
Bu örnek, request nesnesini kullanarak form verilerini almayı, session nesnesini kullanarak kullanıcı oturumunu yönetmeyi ve basit koşullu mantıkla dinamik içerik sunmayı göstermektedir.
Modern JSP Geliştirme: JSTL ve EL ile Scriptlet’lardan Kurtulmak
Yukarıdaki örnekte scriptlet’ları yoğun bir şekilde kullandık. Ancak modern JSP geliştirmede bu, kötü bir uygulama olarak kabul edilir.
Neden Scriptlet Kullanmaktan Kaçınmalıyız?
* Kod Okunabilirliği ve Bakımı: HTML ve Java kodunun iç içe geçmesi, sayfanın okunmasını ve bakımını zorlaştırır.
* Ayrım Prensibi (Separation of Concerns): JSP’nin amacı sunum katmanı olmaktır. İş mantığı, veritabanı erişimi gibi görevler Servlet’ler veya JavaBeans gibi ayrı Java sınıflarında olmalıdır. Scriptlet’lar bu ayrımı bozar.
* Hata Ayıklama Zorluğu: HTML içinde Java kodu arasında hata ayıklamak daha karmaşıktır.
* Tasarımcı Dostu Değil: Web tasarımcıları genellikle Java koduna aşina değildir ve scriptlet’larla dolu sayfaları düzenlemekte zorlanırlar.
JSTL (JSP Standard Tag Library)
JSTL, scriptlet’ların yerine geçmek üzere tasarlanmış, standart bir etiket kütüphanesidir. Döngüler, koşullu ifadeler, veri formatlama gibi yaygın görevleri yerine getiren etiketler sunar.
Kurulumu:
JSTL kullanmak için, projenizin WEB-INF/lib klasörüne jstl-1.2.jar (veya daha yeni sürümü) dosyasını eklemeniz gerekir. Bu JAR dosyasını Apache Tomcat’in veya diğer web sunucularının lib klasöründen bulabilir veya Maven/Gradle bağımlılığı olarak ekleyebilirsiniz.
Temel Etiketler:
* Core Etiketleri (c prefix’i ile): , , , , .
* Format Etiketleri (fmt prefix’i ile): Tarih, sayı ve para birimi formatlama.
* SQL Etiketleri (sql prefix’i ile): Veritabanı işlemleri (genellikle MVC’de Controller katmanında yapılır, JSP’de önerilmez).
* XML Etiketleri (x prefix’i ile): XML verileriyle çalışma.
* Functions Etiketleri (fn prefix’i ile): String işlemleri gibi yardımcı fonksiyonlar.
EL (Expression Language)
EL, JSP sayfalarında Java koduna ihtiyaç duymadan verilere erişmek için kullanılan basit bir dildir. Genellikle JSTL etiketleriyle birlikte kullanılır ve JavaBeans özelliklerine, koleksiyon elemanlarına, parametrelere ve gizli nesnelere kolayca erişim sağlar.
Örnekler:
* ${kullanici.ad}: kullanici adlı bir JavaBean’in ad özelliğine erişir.
* ${param.username}: username adlı bir HTTP isteği parametresine erişir.
* ${sessionScope.loggedInUser}: Oturumdaki loggedInUser adlı değişkene erişir.
* ${requestScope.mesaj}: İstekteki mesaj adlı değişkene erişir.
islem.jsp‘yi JSTL ve EL ile Yeniden Yazma:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Giriş Sonucu
Giriş Sonucu
Hoş geldiniz, !
Giriş başarılı. Ana Sayfaya Git
Kullanıcı adı veya şifre yanlış.
Bu versiyon, scriptlet’lardan çok daha temiz ve okunabilirdir.
JSP ve MVC Mimarisi
JSP, genellikle MVC (Model-View-Controller) mimarisiyle birlikte kullanılır. Bu mimari, bir uygulamanın farklı katmanlarını ayırarak geliştirme, bakım ve ölçeklenebilirliği kolaylaştırır.
* Model: Uygulamanın veri ve iş mantığını temsil eder (örneğin, JavaBeans, DAO sınıfları).
* View: Kullanıcıya sunulan arayüzü temsil eder (JSP sayfaları). JSP’ler, Model’den gelen verileri alıp kullanıcıya gösterir.
* Controller: Kullanıcıdan gelen istekleri alır, Model ile etkileşime girer ve uygun View’ı seçerek yanıtı hazırlar (Servlet’ler).
Bu yapıda, Servlet’ler (Controller) kullanıcıdan gelen istekleri işler, gerekli iş mantığını (Model) çağırır, verileri hazırlar ve bu verileri JSP sayfalarına (View) iletir. JSP sayfaları sadece bu verileri alıp HTML olarak sunar, içinde iş mantığı barındırmaz. Bu, “Thin View” veya “Smart Controller, Dumb View” prensibi olarak bilinir.
İleri Düzey Konulara Kısa Bir Bakış
JSP’nin temelini öğrendikten sonra, uygulamanızı daha da geliştirmek için bazı ileri düzey konuları keşfedebilirsiniz:
Özel Etiket Kütüphaneleri (Custom Tag Libraries)
JSTL gibi, kendi özel etiket kütüphanelerinizi oluşturabilirsiniz. Bu, uygulamanıza özel tekrar kullanılabilir bileşenler veya işlevler tanımlamanıza olanak tanır.
JSP Fragmentleri ve Şablonlar
include direktifi ve eylemi, sayfa bölümlerini tekrar kullanmak için harika olsa da, daha gelişmiş şablonlama için Apache Tiles gibi framework’ler veya JSP’nin kendisinde daha yapılandırılmış yaklaşımlar (örneğin, bir temel şablon ve içeriği dolduran fragmentler) kullanılabilir.
Hata Yönetimi
JSP, hataları yönetmek için errorPage ve isErrorPage direktiflerini sunar. Ayrıca web.xml dosyasında yapılandırması ile belirli HTTP durum kodları veya istisna türleri için özel hata sayfaları tanımlayabilirsiniz.
Güvenlik
JSP uygulamaları geliştirirken güvenlik kritik öneme sahiptir.
* XSS (Cross-Site Scripting): Kullanıcıdan alınan verileri doğrudan sayfaya yazdırmadan önce her zaman temizleyin veya kaçış karakterlerine dönüştürün ( JSTL’de varsayılan olarak bunu yapar).
* SQL Enjeksiyonu: Veritabanı sorgularında parametreli sorgular kullanın, asla kullanıcı girdilerini doğrudan sorguya eklemeyin.
* Oturum Güvenliği: Oturum kimliklerinin çalınmasını önlemek için HTTPS kullanın ve oturum kimliklerini URL’de göstermekten kaçının.
En İyi Uygulamalar ve İpuçları
* Scriptlet’lardan Uzak Durun: Mümkün olduğunca JSTL ve EL kullanın. JSP’ler sadece sunum katmanı olmalıdır.
* Kodu Temiz Tutun: HTML, CSS ve JavaScript’i ayrı dosyalarda tutun ve JSP’de sadece bunları dahil edin veya çağırın.
* MVC Mimarisine Uyun: İş mantığını Servlet’lere veya diğer Java sınıflarına taşıyın. JSP’ler sadece verileri gösteren “aptal” görünümler olmalıdır.
* Kapsamlı Hata Yönetimi Uygulayın: Kullanıcıya dostça hata mesajları gösterin ve sunucu tarafında hataları düzgün bir şekilde günlüğe kaydedin.
* Güvenlik Konusunda Dikkatli Olun: XSS, CSRF, SQL enjeksiyonu gibi yaygın güvenlik açıklarına karşı önlemler alın.
Sonuç
JSP, Java platformunda dinamik web içeriği oluşturmak için güçlü ve esnek bir teknolojidir. HTML ile Java kodunu birleştirme yeteneği sayesinde, geliştiricilerin etkileşimli ve kişiselleştirilmiş web deneyimleri sunmasını sağlar. Başlangıçta scriptlet’larla kod yazmak cazip gelse de, modern web geliştirme yaklaşımları (özellikle JSTL ve EL ile birlikte) JSP’yi daha temiz, bakımı kolay ve MVC prensiplerine uygun bir sunum katmanı aracı haline getirmiştir.
Bu makale, JSP’nin temel kavramlarını, söz dizimini ve pratik bir örnekle nasıl kullanılacağını kapsayan kapsamlı bir başlangıç rehberi sunmuştur. JSP öğrenmek, Java tabanlı web uygulamaları dünyasına adım atmak için harika bir yoldur ve Spring MVC, JSF gibi daha gelişmiş framework’lerin temelini anlamanıza yardımcı olacaktır. Öğrenmeye devam edin, pratik yapın ve web geliştirme yolculuğunuzda başarılar dileriz!