Takip et

JSP Mülakat Soruları ve Cevapları: Kapsamlı Bir Rehber

JSP Mülakat Soruları ve Cevapları: Kapsamlı Bir Rehber JSP (JavaServer Pages), dinamik web sayfaları oluşturmak için kullanılan güçlü bi

JSP Mülakat Soruları ve Cevapları: Kapsamlı Bir Rehber

JSP (JavaServer Pages), dinamik web sayfaları oluşturmak için kullanılan güçlü bir Java teknolojisidir. Her ne kadar modern frontend framework’leri popülerleşse de, birçok kurumsal uygulamada JSP hala aktif olarak kullanılmakta veya bakım süreçlerinde karşımıza çıkmaktadır. Bu nedenle, bir Java geliştiricisi için JSP temellerini ve ileri düzey konularını bilmek önemlidir. Bu rehber, JSP mülakatlarında karşılaşabileceğiniz temel ve ileri düzey sorulara kapsamlı yanıtlar sunmaktadır.

JSP Nedir ve Neden Kullanılır?

JSP, HTML veya XML gibi statik içeriklerle Java kodunu birleştirmeyi sağlayan sunucu taraflı bir teknolojidir. Temel amacı, dinamik içerik üreterek tarayıcıya gönderilecek web sayfalarını oluşturmaktır.

JSP’nin Avantajları:

  • Hızlı Geliştirme: HTML tabanlı olduğu için sayfa tasarımı ve içeriği kolayca düzenlenebilir.
  • Java Gücü: Tüm Java API’lerine ve kütüphanelerine erişim imkanı sunar.
  • Platform Bağımsızlığı: Java olduğu için herhangi bir işletim sisteminde veya web sunucusunda çalışabilir.
  • Bileşen Tabanlı Yaklaşım: Custom Tag Library’ler ile tekrar kullanılabilir bileşenler oluşturulabilir.

JSP’nin Dezavantajları (ve Neden EL/JSTL Kullanılmalı):

  • Scriptlet Karmaşası: Çok fazla Java kodu (scriptlet) kullanmak, sayfanın okunabilirliğini ve bakımını zorlaştırır. Bu nedenle Expression Language (EL) ve JSTL kullanımı şiddetle tavsiye edilir.
  • Mantık Karışımı: JSP’nin içine iş mantığı (business logic) yazmak, MVC prensiplerini ihlal eder ve kodun yönetimini zorlaştırır.

JSP Yaşam Döngüsü ve Temel Bileşenleri

JSP’nin nasıl çalıştığını anlamak için yaşam döngüsünü ve temel bileşenlerini bilmek kritik öneme sahiptir.

JSP Yaşam Döngüsü (Lifecycle)

Bir JSP sayfasının sunucu tarafından işlenmesi aşağıdaki adımları içerir:

  1. Çeviri (Translation): Web sunucusu (örneğin Tomcat), .jsp uzantılı bir dosyayı ilk kez istediğinde, JSP motoru bu dosyayı bir Java Servlet sınıfına çevirir.
  2. Derleme (Compilation): Çevrilen Servlet sınıfı (.java dosyası) derlenerek bir .class dosyasına dönüştürülür.
  3. Yükleme (Loading): Servlet sınıfı JVM’ye yüklenir.
  4. Örnekleme (Instantiation): Servlet sınıfının bir örneği oluşturulur.
  5. Başlatma (Initialization – jspInit()): jspInit() metodu çağrılır. Bu metod, Servlet yaşam döngüsündeki init() metoduna benzer ve JSP sayfası ilk yüklendiğinde bir kez çalışır. Genellikle veritabanı bağlantıları gibi tek seferlik başlatma işlemleri için kullanılır.
  6. İstek İşleme (Request Processing – _jspService()): Her HTTP isteği geldiğinde, _jspService() metodu çağrılır. Bu metod, JSP sayfasındaki tüm içeriği (HTML, Java kodları, EL ifadeleri vb.) işleyerek tarayıcıya gönderilecek yanıtı oluşturur. Bu, JSP dosyasında gördüğümüz ana bölümdür.
  7. Sonlandırma (Destruction – jspDestroy()): Web sunucusu JSP sayfasını bellekten kaldırmaya karar verdiğinde (örneğin sunucu kapatıldığında), jspDestroy() metodu çağrılır. Bu metod, jspInit() içinde açılan kaynakları (veritabanı bağlantıları, dosya akışları vb.) kapatmak için kullanılır. Servlet yaşam döngüsündeki destroy() metoduna benzer.

Pratik Bilgi: jspInit() ve jspDestroy() metodlarını bir JSP sayfasında nadiren doğrudan tanımlarsınız. Genellikle Servlet’lerde veya dinleyicilerde (listeners) bu tür başlatma/sonlandırma işlemleri yapılır.

JSP Bileşenleri (Scripting Elements)

JSP, dinamik içerik oluşturmak için çeşitli bileşenler sunar:

  • Scriptlet (<% ... %>): JSP sayfasına doğrudan Java kodu yazmak için kullanılır.
    <%
        String message = "Merhaba JSP!";
        out.println("

    " + message + "

    "); %>

    Pratik Bilgi: Scriptlet’lardan mümkün olduğunca kaçınmalı, bunun yerine EL ve JSTL kullanmalısınız.

  • Expression (<%= ... %>): Bir Java ifadesinin sonucunu doğrudan HTML çıktısına yazdırmak için kullanılır.

    Bugünün tarihi: <%= new java.util.Date() %>

  • Declaration (<%! ... %>): JSP sayfasında metodlar veya sınıf değişkenleri tanımlamak için kullanılır. Bu kod, çevrilen Servlet sınıfının dışında yer alır.
    <%!
        public int add(int a, int b) {
            return a + b;
        }
    %>
    

    10 + 20 = <%= add(10, 20) %>

  • Directives (<%@ ... %>): JSP motoruna sayfanın genel yapısı hakkında bilgi verir.
    • page: Sayfa seviyesinde ayarlar (dil, içerik türü, hata sayfası vb.)
      <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <%@ page errorPage="error.jsp"%>
      <%@ page import="java.util.List, java.util.ArrayList"%>
    • include: Başka bir JSP veya HTML dosyasını mevcut sayfaya dahil eder (çeviri zamanında).
      <%@ include file="header.jsp"%>
    • taglib: Özel etiket kütüphanelerini veya JSTL’yi kullanmak için tanımlama yapar.
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  • Comments (<%-- ... --%>): Sunucu tarafından işlenmeyen JSP yorumlarıdır. Tarayıcıya gönderilmezler.
    <%-- Bu bir JSP yorumudur, istemciye gönderilmez --%>

JSP Implicit Objects (Gizli Nesneler)

JSP, geliştiricinin doğrudan tanımlamasına gerek kalmadan kullanabileceği 9 adet “gizli nesne” sunar. Bunlar, _jspService() metodu içinde otomatik olarak kullanılabilir durumdadır.

  • request: HTTP isteği hakkında bilgi içerir (parametreler, başlıklar vb.).

    Kullanıcı Adı: <%= request.getParameter("username") %>

  • response: HTTP yanıtı oluşturmak için kullanılır (başlıkları ayarlama, yönlendirme vb.).
    <% response.sendRedirect("success.jsp"); %>
  • session: Kullanıcının oturum bilgilerini tutar.
    <% session.setAttribute("user", "Ali"); %>
    

    Oturumdaki Kullanıcı: <%= session.getAttribute("user") %>

  • application: Uygulama genelindeki bilgileri tutar. Tüm kullanıcılar tarafından paylaşılır.
    <% application.setAttribute("appCounter", 1); %>
  • out: JSP sayfasından tarayıcıya çıktı yazmak için kullanılır (response.getWriter()‘ın bir örneği).
    <% out.println("Merhaba dünya!"); %>
  • pageContext: Sayfa, istek, oturum ve uygulama kapsamındaki nesnelere erişim sağlar.
    <% pageContext.setAttribute("myVar", "Değer", PageContext.REQUEST_SCOPE); %>
  • config: Servlet yapılandırma bilgilerini içerir.
    <% out.println("Servlet Adı: " + config.getServletName()); %>
  • page: JSP sayfasının kendisini temsil eden Servlet örneğidir. (Çok nadiren kullanılır.)
  • exception: Hata sayfalarında yakalanan istisnayı temsil eder (sadece isErrorPage="true" olan sayfalarda geçerlidir).
    <%-- error.jsp içinde --%>
    

    Hata Mesajı: <%= exception.getMessage() %>

JSP Gelişmiş Özellikler ve En İyi Pratikler

Modern JSP geliştirmede scriptlet’lardan kaçınmak ve daha temiz, bakımı kolay kod yazmak için bazı gelişmiş özellikler ve pratikler kullanılır.

Expression Language (EL)

EL, JSP sayfalarından Java bean’lerine, implicit objelere ve diğer verilere kolayca erişmek için kullanılan bir dildir. Scriptlet’lara göre çok daha temiz ve okunabilirdir.

<%-- Örnek bir Java Bean sınıfı --%>
public class User {
    private String name;
    private int age;
    // Getter ve Setter'lar
}

<%-- Servlet veya Controller'da: --%>
User user = new User("Ayşe", 30);
request.setAttribute("currentUser", user);


Kullanıcı Adı: ${currentUser.name}

Yaş: ${currentUser.age}

Oturum ID: ${pageContext.session.id}

İstek Parametresi (username): ${param.username}

Pratik Bilgi: EL, null değerleri otomatik olarak güvenli bir şekilde işler ve NullPointerException fırlatmaz.

JSP Standard Tag Library (JSTL)

JSTL, JSP sayfalarında sıkça kullanılan döngü, koşullu ifade, formatlama, XML işleme gibi görevleri standart etiketler aracılığıyla gerçekleştirmeyi sağlayan bir kütüphanedir. Scriptlet kullanımını büyük ölçüde azaltır.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%-- Servlet veya Controller'da: --%>
List items = new ArrayList<>();
items.add("Elma");
items.add("Armut");
items.add("Çilek");
request.setAttribute("meyveler", items);


Meyveler:

  • ${meyve}

Formatlı Sayı:

Oy kullanabilirsiniz.

Oy kullanmak için yaşınız küçük.

Pratik Bilgi: JSTL’nin farklı kategorileri (core, fmt, functions, xml, sql) vardır. Genellikle “core” ve “fmt” en sık kullanılanlardır.

Custom Tag Library (Özel Etiket Kütüphaneleri)

JSP’de tekrarlayan veya karmaşık mantığı kapsüllemek ve yeniden kullanılabilir bileşenler oluşturmak için özel etiket kütüphaneleri oluşturulabilir. Bu, HTML ve Java kodunu daha iyi ayırmaya yardımcı olur. Özel bir etiket, bir Java sınıfı (tag handler) ve bir Tag Library Descriptor (TLD) dosyası ile tanımlanır.

Hata Yönetimi ve Güvenlik

  • Hata Yönetimi: JSP’de hata yönetimi için page direktifindeki errorPage ve isErrorPage nitelikleri kullanılır.
    <%@ page errorPage="error.jsp" %> 

    error.jsp sayfasında ise:

    <%@ page isErrorPage="true" %> 

    EL ile de erişilebilir: ${sessionScope.kullaniciAdi}

    4. JSP’de bir Java sınıfının metodunu nasıl çağırabilirim?

    Cevap:

    • Deklarasyon ile: Bir <%! ... %> bloğunda metod tanımlayıp sonra çağırabilirsiniz (genellikle tercih edilmez).
    • Bean Kullanarak: En iyi yol, bir Java Bean oluşturmak, onu uygun bir kapsamda (request, session, application) ayarlamak ve EL ile metodlarını çağırmaktır.
      <%-- Servlet'te --%>
      MyUtility util = new MyUtility();
      request.setAttribute("myUtil", util);
      
      
      	
      		
      		
      
      
      	
E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.