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:
- Dışarı
- Talep Alma
- yanıt
- Yapılandırma
- Uygulama
- oturum
- Sayfa Bağlamı
- Sayfa
- 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:
Çı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)
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ı:
Testi yazıp gönder butonuna tıkladığınızda aşağıdaki çıktıyı alırsınız: “Welcome Test.”
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)
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:
Çı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:
Kullanıcı adı için olan bağlantıya tıkladığınızda aşağıdaki çıktıyı alacaksınız.
Çı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:
Çı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:
Çı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ı:
Beşinci elemanın num1 dizisini aldığımız dizide ArrayIndexOfBoundsException elde ediyoruz.