Java JSP Nedir? Kullanımı ve Dersleri

JSP veya Java Server Pages ile web sayfası hazırlarken kullanılan JSP etiketleri, JSP nesneleri, Java Bean, JSTL, EL kütüphane örnekleri ve kullanımı yer alıyor.

JSP nedir?

JSP veya Java Server Pages, HTML kodları içerisine Java komutlarını kolay bir şekilde yerleştirmek için kullanılan Java EE API kütüphanesidir.

Uzun HTML kodları Servlet yönetimini karmaşık ve zor hale getirir.

JSP etiketleri ile Java komutları kolay bir şekilde HTML kodları içerisine yerleştirilir.

Örnek JSP komutları

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title><% out.println("Merhaba JSP");%></title>
    </head>
    <body>
        <h1><% out.println("Merhaba JSP");%></h1>
    </body>
</html>

JSP yaşam döngüsü

JSP dosyaları derlenerek javax.servlet.jsp.HttpJspPage arayüzünü kullanan Servlet sınıfına dönüştürülür.

Servlet yaşam döngüsünden farklı olarak init yerine jspInit, destroy yerine jspDestroy, service yerine _jspService metodu çalıştırılır.

HTML kodları HttpJspPage arayüzünde yer alan _jspService metoduna yerleştirilir.

JSP etiketleri

Java komutlarını HTML kodlarına yerleştirmek için çeşitli JSP etiketleri kullanılır.

Etiketler yaptığı işleve ve çalışma sırasına göre gruplara ayrılır.

Direktif etiketi – Directive tag

JSP sayfalarına özellik eklemek için kullanılır.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<%@include file="menu.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

Direktif etiketleri ayrıca çeşitli özelliklere sahiptir.

page – import, contentType, extends, info, buffer, language, isELIgnored, isThreadSafe, autoFlush, session, pageEncoding, errorPage, isErrorPage

include – file

taglib – prefix, tagdir, uri

Tanımlama etiketi – Declaration Tag

Metot ve değişken tanımlamak için kullanılır.

<%!
    double radius = 7;
    double pi = 3.1415;

    double area() {
        return pi * radius * radius;
    }
%>

Metot ve değişkenler _jspService metodunun dışına yerleştirilir.

Kodlama etiketi – Scriptlet Tag

Java komutlarını yazmak için kullanılır.

<%
    String firstName = request.getParameter("firstname");
    String lastName = request.getParameter("lastname");
    System.out.println(firstName + " " + lastName);
%>

Yazdırma etiketi – Expression Tag 

Yazdırma veya çıktı işlemini daha kolay yapmak için kullanılır.

<%="Merhaba JSP"%>

Yorum etiketi – Comments Tag

Komutları açıklamak veya devre dışı bırakmak için kullanılır.

<%-- Örnek JSP açıklaması --%>
<%-- <% out.println("Merhaba JSP");%> --%>

JSP nesneleri

JSP İstek (request), cevap (response), oturum (session) gibi işlemleri yönetmek için çeşitli nesneleri tanımlar.

out – JspWriter

Yazdırma ve çıktı işlemleri için JspWriter soyut sınıfının bir örneği olan out kullanılır.

<% out.println("Merhaba JSP");%>

request – HttpServletRequest

İstek ile ilgili bilgil almak, çerezleri yönetmek için HttpServletRequest arayüzünün bir örneği olan request kullanılır.

<%= request.getMethod()%> <br />
<%= request.getHeader("user-agent")%> <br />
<%= request.getRequestURI()%> <br />
<%= request.getProtocol()%> <br />
<%= request.getServerName()%> <br />
<%= request.getServerPort()%> <br />
<%= request.getRemoteAddr()%> <br />
<%= request.getRemoteHost()%> <br />
<%= request.getLocale()%> <br />
<%= request.getRequestURL()%>

response – HttpServletResponse

Gelen isteğe karşılık verilecek cevapları yönetmek için HttpServletResponse arayüzünün bir örneği olan response kullanılır.

<% response.setHeader("Content-Type", "text/plain"); %>
<% response.addCookie(new Cookie("URL", "www.yusufsezer.com")); %>
<% response.sendRedirect("http://www.yusufsezer.com.tr"); %>
<% response.setStatus(401); %>
<% response.sendError(401); %>

config – ServletConfig

Genellikle web.xml dosyasında yer alan başlangıç (init) parametrelerini almak için ServletConfig arayüzünün bir örneği olan config kullanılır.

<% config.getInitParameter("VTBaglantisi"); %>

application – ServletContext

Uygulama ile ilgili ve web.xml yer alan parametreleri almak için ServletContext arayüzünün bir örneği olan application kullanılır.

<%=application.getMajorVersion() %>
<%=application.getMinorVersion() %>

session – HttpSession

Oturum veya session yönetimi için HttpSession arayüzünün bir örneği olan session kullanılır.

<%
    Object istekSayisi = session.getAttribute("istekSayisi");
    if (istekSayisi == null) {
        session.setAttribute("istekSayisi", 0);
        System.out.println("ilk istek");
    } else {
        Integer istek = Integer.parseInt(istekSayisi.toString());
        session.setAttribute("istekSayisi", ++istek);
        System.out.println(istek);
    }
%>

pageContext – PageContext

JSP sayfasında yer alan tüm nesnelere erişmek için PageContext soyut sınıfının bir örneği olan pageContext kullanılır.

<%
    pageContext.getRequest(); // request
    pageContext.getResponse(); // response
    pageContext.getSession(); // session
    pageContext.getServletConfig(); // config
%>

Soyut sınıfta yer alan APPLICATION_SCOPE, PAGE_SCOPE, REQUEST_SCOPE, SESSION_SCOPE gibi değerler kullanılarak diğer alanlara değer atanabilir.

page – Object

JSP sayfasını işaret eden ve sayfa içerisinde kullanılan this anahtar kelimesi ile aynı değeri ifade eder.

<% System.out.println(page.equals(this)); %>

Dönüşüm işlemine ihtiyaç olmadığından page değişkeni yerine this anahtar kelimesini kullanmak faydalı olacaktır.

exception – Throwable

Oluşan hatalara erişmek için Throwable sınıfının bir örneği olan exception kullanılır.

<%@page isErrorPage="true" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title><% out.println("Merhaba JSP");%></title>
    </head>
    <body>
        <%=exception%>
    </body>
</html>

NOT: Kullanım için direktif etiketleri ile belirtilmelidir.

Hata yönetimi

Hataları yönetmek için page direktif etiketi errorPage veya isErrorPage özelliği

<%@page isErrorPage="true" %>
<%@page errorPage="hata.jsp" %>

veya web.xml kullanılabilir.

<web-app>

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/hata.jsp</location>
</error-page>

</web-app>

Diğer JSP etiketleri

İşlemleri daha kolay yapmak ve Java Bean olarak adlandırılan sınıfları esnek kullanmak için JSP etiketleri kullanılabilir.

  • jsp:forward – request ve response değerlerini başka sayfaya aktarır.
  • jsp:include – request ve response değerlerini başka sayfaya aktarır ve dahil eder.
  • jsp:useBean – Java Bean örneği oluşturur.
  • jsp:setProperty – Java Bean örneğine değer atar.
  • jsp:getProperty – Java Bean örneğine atanan değeri alır.
  • jsp:plugin – Applet gibi eklentileri dahil eder.
  • jsp:param – JSP etiketlerine parametre eklemek için kullanılır.
  • jsp:fallback – plugin JSP etiketi ile kullanılır.

Java Bean kullanımı

Java Bean verileri almak yönetmek için kullanılan ve bazı kuralları olan sıradan Java sınıflarıdır.

  1. Parametresiz kurucusu olmalıdır.
  2. Serializable arayüzünü uygulamalıdır.
  3. Her bir sınıf özelliğine ait get ve set metodu olmalıdır.

Örnek Java Bean sınıfı aşağıda yer almaktadır.

import java.io.Serializable;

public class User implements Serializable {

    String firstName;
    String lastName;

    public User() {
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

Java Bean’lar JSP etiketi ile kullanılabileceği gibi jsp:useBean, jsp:jsp:setProperty, jsp:getProperty etiketleri ile de kullanılabilir.

<jsp:useBean id="yusuf" class="com.yusufsezer.model.User" />
<jsp:setProperty name="yusuf" property="firstName" value="Yusuf" />
<jsp:setProperty name="yusuf" property="lastName" value="SEZER" />

Merhaba <jsp:getProperty name="yusuf" property="firstName" /> 
<jsp:getProperty name="yusuf" property="lastName" />

NOT: JSP etiketleri GET veya POST ile gönderilen aynı isimdeki değerleri eşleştirir.

EL – Expression Language

Expression Language JSP nesneleri ve Java Bean verilerine erişimi kolaylaştırır.

${ ifade } 

EL ile aritmetiksel, mantıksal ve diğer operatörler kullanılabilir.

${2+3} <br />
${2+3<10} <br />
${20+30<=10} <br />
${"yusuf" == "yusuf" ? "Eşit":"Eşit değil"} <br />
${header['user-agent']} <br />
${header} <br />

EL ile kullanılacak nesneler şunlardır; pageScope, requestScope, sessionScope, applicationScope, param, paramValues, header, headerValues, cookie, initParam, pageContext

Örneğin; Formdan gelen bilgileri almak için param nesnesi kullanılabilir.

${param.firstname}
${param.lastname}

JSTL – JSP Standard Tag Library

Yeni JSP etiketi oluşturmak, veritabanı, formatlama gibi işlemler için JSTL kütüphanesi kullanılır.

Etiket oluşturmak

JSTL ile yeni bir etiket oluşturmak için TagSupport veya SimpleTagSupport sınıfını kalıtım alan bir sınıf oluşturmak ve etiket ile ilgili bilgilerini içeren XML dosyası oluşturmak yeterli olacaktır.

JSTL içerisinde Core Tags, Function Tags, Formatting Tags, XML Tags ve SQL Tags olarak adlandırılan etiketleri içerdiğinden yeni etiket oluşturmak yerine bu etiketleri kullanmak faydalı olacaktır.

Core Tags

Yazdırma, değişken tanımlama ve kaldırma, istisna yönetimi, koşullu ifade gibi temel işlemleri yapmak için kullanılır.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="<h1>Merhaba JSTL</h1>" escapeXml="true" default="Merhaba" /> <br />
<c:set var="URL" value="http://www.yusufsezer.com" /> <br />
${URL} <br />
<c:remove var="URL" /> <br />
${URL} <br />
<c:if test="${ 7 < 15}">
    <p>7 < 15</p>
</c:if>

Function Tags

String veri türüne ait veriler üzerinde işlem yapan fonksiyonlar için kullanılır.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:toUpperCase("Yusuf SEZER")} <br />
${fn:toLowerCase("Yusuf SEZER")} <br />
${fn:escapeXml("<script>alert('Merhaba JSTL')</script>")} <br />
${fn:length("Yusuf SEZER")} <br />
${fn:length(fn:trim("  Yusuf "))} <br />

Formatting Tags

Sayı, Tarih, Para birimi gibi değerleri formatlamak için kullanılır.

<c:set var="mynumber" value="1234.56" />
<fmt:parseNumber var="parsenumber" type="number" value="${mynumber}" />
<fmt:setLocale value="tr_TR" />
<fmt:formatNumber value="${parsenumber}" type="currency" /> <br />
<fmt:formatNumber value="${parsenumber}" type="percent" /> <br />
<fmt:setLocale value="en_US" />
<fmt:formatNumber value="${parsenumber}" type="currency" /> <br />
<fmt:formatNumber value="${parsenumber}" type="percent" /> <br />
<c:set var="mydate" value="<%= new java.util.Date()%>" />
<fmt:formatDate value="${mydate}" type="both" timeStyle="short" dateStyle="short" />

XML Tags

XML dosyasını okuma, ayrıştırma, seçme gibi XML işlemleri için kullanılır.

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<c:set var="kisilerXML">
<kisiler>
    <kisi>
        <sira>1</sira>
        <adi>Yusuf</adi>
        <soyadi>SEZER</soyadi>
    </kisi>
    <kisi>
        <sira>2</sira>
        <adi>Ramazan</adi>
        <soyadi>SEZER</soyadi>
    </kisi>
    <kisi>
        <sira>3</sira>
        <adi>Sinan</adi>
        <soyadi>SEZER</soyadi>
    </kisi>
    <kisi>
        <sira>4</sira>
        <adi>Mehmet</adi>
        <soyadi>SEZER</soyadi>
    </kisi>
</kisiler>
</c:set>
<x:parse xml="${kisilerXML}" var="kisiler" />
<ul>
<x:forEach select="$kisiler/kisiler/kisi" var="kisiBilgisi">
    <li>
        <x:out select="$kisiBilgisi/adi" /> -
        <x:out select="$kisiBilgisi/soyadi" />
    </li>
</x:forEach>
</ul>

SQL Tags

Veritabanı bağlantısı, sorgusu gibi işlemleri yapmak için kullanılır.

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<sql:setDataSource var="VT" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="root" />
<sql:query dataSource="${VT}" var="kayit">
    SELECT * FROM users
</sql:query>
<c:forEach var="kisi" items="kayit.rows">
    <c:out value="${kisi.adi}" />
    <c:out value="${kisi.soyadi}" />
</c:forEach>

Java Server Pages kütüphanesine sonradan eklenen Expression Language ve JSP Standard Tag Library özellikleri kod karmaşıklığını azaltmaktadır.

Son

JSP HTML kodları arasına Java komutlarını eklemeyi kolaylaştırmak için geliştirilmiştir.

Servlet MVC mimarisinde gelen isteklerin yönetildiği Controller görevini üstlenirken JSP View görevini üstlenir.

Model katmanında ise Java Bean sınıfları kullanılır.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!