JSP Örtülü Nesneleri

JSP Örtülü nesne nedir?

  • JSP örtük nesneleri, JSP'nin servlet'e çevrilmesi aşamasında oluşturulur.
  • Bu nesneler doğrudan servis yöntemine giren komut dosyalarında kullanılabilir.
  • Konteyner tarafından otomatik olarak oluşturulurlar ve nesneler kullanılarak erişilebilirler.

JSP'de kaç tane Örtülü Nesne mevcuttur?

Kapta 9 tür örtülü nesne mevcuttur:

  1. Dışarı
  2. Talep Alma
  3. yanıt
  4. Yapılandırma
  5. Uygulama
  6. oturum
  7. Sayfa Bağlamı
  8. Sayfa
  9. Istisna

Teker teker çalışalım

1) Dışarı

  • Out, verileri tampona yazmak ve yanıt olarak istemciye çıktı göndermek için kullanılan örtük nesnelerden biridir
  • Out nesnesi sunucu uygulamasının çıktı akışına erişmemizi sağlar
  • Out, javax.servlet.jsp.jspWriter sınıfının nesnesidir
  • İle çalışırken sunucu uygulaması, yazıcı yazarı nesnesine ihtiyacımız var

Örnek:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit Guru JSP1</title>
</head>
<body>
<% int num1=10;int num2=20;
out.println("num1 is " +num1);
out.println("num2 is "+num2);
%>
</body>
</html>

Kodun açıklaması:

Kod Satırı 11-12– out, çıktı akışına yazdırmak için kullanılır

Yukarıdaki kodu çalıştırdığımızda aşağıdaki çıktıyı alırız:

JSP'de

Çıktı:

  • Çıktıda num1 ve num2 değerlerini alıyoruz

2) İstek

  • İstek nesnesi Java.servlet.http.HttpServletRequest'in bir örneğidir ve hizmet yönteminin argümanlarından biridir.
  • Her istek için konteyner tarafından oluşturulacaktır.
  • Parametre, başlık bilgisi, sunucu adı vb. bilgileri istemek için kullanılacaktır.
  • İstek parametresine erişmek için getParameter() işlevini kullanır.

Örnek:

Implicit_jsp2.jsp(isteğin guru.jsp'ye gönderildiği form)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit Guru form JSP2</title>
</head>
<body>
<form action="guru.jsp">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>

Guru.jsp (eylemin yapıldığı yer)

JSP'de istek

Kodun açıklaması:

Kod Satırı 10-13: Implicit_jsp2.jsp(form)'da istek gönderilir, dolayısıyla kullanıcı adı değişkeni işlenir ve JSP'nin eylemi olan guru.jsp'ye gönderilir.

Guru.jsp

Kod Satırı10-11: İsteğin işlendiği action jsp'dir ve kullanıcı adı form jsp'den alınır.

Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız

Çıktı:

JSP'de istek

Testi yazıp gönder butonuna tıkladığınızda aşağıdaki çıktıyı alırsınız: “Welcome Test.”

JSP'de istek

3) Yanıt

  • “Response”, HttpServletResponse arayüzünü uygulayan bir sınıf örneğidir
  • Container bu nesneyi oluşturur ve parametre olarak _jspservice() yöntemine aktarır
  • Her istek için konteyner tarafından “Yanıt nesnesi” oluşturulacaktır.
  • Danışana verilebilecek yanıtı temsil eder.
  • Yanıt örtülü nesnesi içerik türü, çerez eklemek ve yanıt sayfasına yönlendirmek için kullanılır

Örnek:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit Guru JSP4</title>
</head>
<body>
<%response.setContentType("text/html"); %>
</body>
</html>

Kodun açıklaması:

Kod Satırı 11: Yanıt nesnesinde içerik türünü ayarlayabiliriz

Burada yanıt nesnesinde yalnızca içerik türünü ayarlıyoruz. Dolayısıyla buna yönelik bir çıktı yoktur.

4) Yapılandırma

  • “Config” java.servlet.servletConfig türündedir
  • Her jsp sayfası için kapsayıcı tarafından oluşturulur.
  • Web.xml'de başlatma parametresini almak için kullanılır

Örnek:

Web.xml (sunucu uygulamasının adını ve eşlemesini belirtir)

JSP'de yapılandırma

Implicit_jsp5.jsp (sunucu uygulaması adının değerini alma)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit Guru JSP5</title>
</head>
<body>
<% String servletName = config.getServletName();
out.println("Servlet Name is " +servletName);%>
</body>
</html>

Kodun açıklaması:

web.xml'de

Kod Satırı 14-17: Web.xml'de servletlerin sınıflarla eşleştirilmesine sahibiz.

Implicit_jsp5.jsp

Kod Satırı 10-11: JSP'de sunucu uygulamasının adını almak için, sunucu uygulamasının adını almamıza yardımcı olacak config.getServletName'i kullanabiliriz.

Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

JSP'deki yanıt

Çıktı:

  • Servlet adı web.xml dosyasında mevcut olduğundan “GuruServlet”tir.

5) Uygulama

  • Uygulama nesnesi (kod satırı 10) javax.servlet.ServletContext'in bir örneğidir ve JSP'deki bağlam bilgilerini ve niteliklerini almak için kullanılır.
  • Uygulama nesnesi, uygulama dağıtıldığında uygulama başına bir konteyner tarafından oluşturulur.
  • Servletcontext nesnesi, servlet kapsayıcısıyla etkileşimde bulunmak için kullanılan bir dizi yöntem içerir. Servlet kapsayıcısı hakkında bilgi bulabiliriz.

Örnek:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Guru Implicit JSP6</title>
</head>
<body>
<% application.getContextPath(); %>
</body>
</html>

Kodun açıklaması:

  • Yukarıdaki kodda, uygulama niteliği JSP sayfasının içerik yolunun elde edilmesine yardımcı olur.

6) Oturum

  • Oturum “httpsession” nesnesini tutuyor (kod satırı 10).
  • Oturum nesnesi, oturum kapsamına ilişkin öznitelikleri almak, ayarlamak ve kaldırmak için kullanılır ve ayrıca oturum bilgilerini almak için kullanılır.

Örnek:

Implicit_jsp7(öznitelik ayarlandı)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit JSP</title>
</head>
<body>
<% session.setAttribute("user","GuruJSP"); %>
<a href="implicit_jsp8.jsp">Click here to get user name</a>
</body>
</html>

Implicit_jsp8.jsp (getAttribute)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>implicit Guru JSP8</title>
</head>
<body>
<% String name = (String)session.getAttribute("user");
out.println("User Name is " +name);
%>
</body>
</html>

Kodun açıklaması:

Implicit_jsp7.jsp

Kod Satırı 11: oturum değişkeninde kullanıcı niteliğini ayarlıyoruz ve bu değer, hangi jsp'nin çağrıldığı oturumdan (_jsp8.jsp) alınabilir.

Kod Satırı 12: Ayarlanan kullanıcı özelliğinin değerini alacağımız href üzerinde başka bir jsp çağırıyoruz.

Implicit_jsp8.jsp

Kod Satırı 11: Kullanıcı özelliğinin değerini oturum nesnesinden alıyoruz ve bu değeri görüntülüyoruz

Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

JSP'deki oturum

Kullanıcı adı için olan bağlantıya tıkladığınızda aşağıdaki çıktıyı alacaksınız.

JSP'deki oturum

Çıktı:

  • implicit_jsp7.jsp dosyasında verilen linke tıkladığımızda ikinci jsp sayfasına yani (_jsp8.jsp) sayfasına yönlendiriliyoruz ve değeri kullanıcı özelliğinin (_jsp7.jsp) oturum nesnesinden alıyoruz.

7) Sayfa Bağlamı

  • Bu nesne sayfa bağlamı türündedir.
  • Belirli bir kapsamdaki nitelikleri almak, ayarlamak ve kaldırmak için kullanılır.

Kapsamlar 4 türden oluşur:

  • Sayfa
  • Talep Alma
  • oturum
  • Uygulama

Örnek:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit Guru JSP9</title>
</head>
<body>
<% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
String name = (String)pageContext.getAttribute("student");
out.println("student name is " +name);
%>
</body>
</html>

Kodun açıklaması:

Kod Satırı 11: niteliği pageContext nesnesini kullanarak ayarlıyoruz ve üç parametresi var:

  • anahtar
  • Özellik
  • kapsam

Yukarıdaki kodda anahtar öğrenci, değer ise “gurustudent” olup kapsam sayfa kapsamıdır. Burada kapsam “sayfa”dır ve yalnızca sayfa kapsamını kullanarak alabilir.

Kod Satırı 12: Özelliğin değerini pageContext kullanarak alıyoruz

Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

JSP'de PageContext

Çıktı:

  • Çıktıda “öğrenci adı gurustudent” yazacaktır.

8) Sayfa

  • Sayfa örtülü değişkeni, karşılık gelen jsp için geçerli olarak yürütülen sunucu uygulaması nesnesini tutar.
  • Geçerli jsp sayfası için bu nesne gibi davranır.

Örnek:

Bu örnekte, toString yöntemini kullanarak sayfa adını almak için sayfa nesnesini kullanıyoruz.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Implicit Guru JSP10</title>
</head>
<body>
<% String pageName = page.toString();
out.println("Page Name is " +pageName);%>
</body>
</html>

Kodun açıklaması:

Kod Satırı 10-11: Bu örnekte, sayfa nesnesinin toString() yöntemini kullanmaya çalışıyoruz ve JSP Sayfasının dize adını almaya çalışıyoruz.

Kodu çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

JSP'deki sayfa

Çıktı:

  • Çıktı yukarıdaki jsp sayfasının dize adıdır

9) İstisna

  • İstisna, atılabilir sınıfın örtülü nesnesidir.
  • İçin kullanılır JSP'de istisna yönetimi.
  • İstisna nesnesi yalnızca hata sayfalarında kullanılabilir.Örnek:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!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>Implicit Guru JSP 11</title>
</head>
<body>
<%int[] num1={1,2,3,4};
out.println(num1[5]);%>
<%= exception %>
</body>
</html>

Kodun açıklaması:

Kod Satırı 10-12 – Sayılardan oluşan bir diziye sahiptir, yani dört öğeli num1. Çıktıda dizi listesinde bildirilmeyen num1'den dizinin beşinci elemanını yazdırmaya çalışıyoruz. Bu nedenle jsp'nin istisna nesnesini almak için kullanılır.

Çıktı:

JSP'de istisna

Beşinci elemanın num1 dizisini aldığımız dizide ArrayIndexOfBoundsException elde ediyoruz.