Niejawne obiekty JSP
โก Inteligentne podsumowanie
Obiekty JSP Implicit to wstฤpnie zdefiniowane zmienne, ktรณre kontener serwletu tworzy automatycznie podczas tลumaczenia strony. Umoลผliwiajฤ one programistom dostฤp do strumieni wyjลciowych, ลผฤ daล, odpowiedzi, sesji i danych aplikacji bezpoลrednio na stronie, bez koniecznoลci rฤcznej deklaracji lub dodatkowej konfiguracji.

Co to jest niejawny obiekt JSP?
- Obiekty niejawne JSP sฤ tworzone w fazie tลumaczenia JSP na serwlet.
- Obiekty te mogฤ byฤ bezpoลrednio uลผyte w skryptach, ktรณre trafiajฤ do metody serwisowej.
- Sฤ one tworzone automatycznie przez kontener i moลผna uzyskaฤ do nich dostฤp za pomocฤ obiektรณw.
Ile obiektรณw niejawnych jest dostฤpnych w JSP?
W kontenerze dostฤpnych jest 9 typรณw obiektรณw ukrytych:
- wyczerpane
- PROลBA
- Odpowiedลบ
- Config
- Zastosowanie
- Sesja
- Kontekst strony
- Strona
- Wyjฤ tek
Uczmy siฤ jeden po drugim
1) Wyjลcie
- Out jest jednym z niejawnych obiektรณw sลuลผฤ cych do zapisywania danych w buforze i wysyลania danych wyjลciowych do klienta w odpowiedzi
- Obiekt Out umoลผliwia nam dostฤp do strumienia wyjลciowego serwletu
- Out jest obiektem javax.servlet.jsp.jspWriter klasa
- Podczas pracy z serwlet, potrzebujemy obiektu printwriter
Przykลad:
<%@ 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>
Wyjaลnienie kodu:
Code Linia 11-12โ out sลuลผy do drukowania do strumienia wyjลciowego
Po wykonaniu powyลผszego kodu otrzymamy nastฤpujฤ cy wynik:
Wyjลcie:
- Na wyjลciu otrzymujemy wartoลci num1 i num2
2) Proลba
- Obiekt ลผฤ dania jest instancjฤ java.servlet.http.HttpServletRequest i jest jednym z argumentรณw metody service
- Bฤdzie on tworzony przez kontener dla kaลผdego ลผฤ dania.
- Bฤdzie uลผywany do ลผฤ dania informacji takich jak parametry, informacje nagลรณwka, nazwa serwera itp.
- Uลผywa funkcji getParameter(), aby uzyskaฤ dostฤp do parametru ลผฤ dania.
Przykลad:
Implicit_jsp2.jsp(formularz, z ktรณrego wysyลane jest ลผฤ danie do guru.jsp)
<%@ 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 (gdzie wykonywana jest akcja)
Wyjaลnienie kodu:
Code Linia 10-13: W implicit_jsp2.jsp(formularz) wysyลane jest ลผฤ danie, stฤ d zmienna username jest przetwarzana i wysyลana do guru.jsp, co jest dziaลaniem JSP.
Guru.jsp
Code Linia 10-11: To akcja jsp, w ktรณrej przetwarzane jest ลผฤ danie, a nazwa uลผytkownika jest pobierana z formularza jsp.
Po wykonaniu powyลผszego kodu otrzymasz nastฤpujฤ cy wynik
Wyjลcie:
Po napisaniu testu i klikniฤciu przycisku โPrzeลlijโ pojawi siฤ nastฤpujฤ cy komunikat: โTest powitalnyโ.
3) Odpowiedลบ
- โResponseโ to instancja klasy implementujฤ ca interfejs HttpServletResponse
- Kontener generuje ten obiekt i przekazuje go do metody _jspservice() jako parametr
- Dla kaลผdego ลผฤ dania kontener bฤdzie tworzony przez kontener โObiekt odpowiedziโ.
- Reprezentuje odpowiedลบ, jakฤ moลผna udzieliฤ klientowi
- Niejawny obiekt odpowiedzi sลuลผy do typu zawartoลci, dodawania plikรณw cookie i przekierowywania do strony odpowiedzi
Przykลad:
<%@ 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>
Wyjaลnienie kodu:
Code Linia 11: W obiekcie odpowiedzi moลผemy ustawiฤ typ zawartoลci
Tutaj ustawiamy tylko typ zawartoลci w obiekcie odpowiedzi. Dlatego nie ma dla tego ลผadnego wyjลcia.
4) Konfiguracja
- โConfigโ jest typu java.servlet.servletConfig
- Jest tworzony przez kontener dla kaลผdej strony jsp
- Sลuลผy do pobrania parametru inicjujฤ cego w pliku web.xml
Przykลad:
Web.xml (okreลla nazwฤ i mapฤping serwletu)
Implicit_jsp5.jsp (pobieranie wartoลci nazwy serwletu)
<%@ 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>
Wyjaลnienie kodu:
W pliku web.xml
Code Linia 14-17: W pliku web.xml mamy mapฤping serwletรณw do klas.
Implicit_jsp5.jsp
Code Linia 10-11: Aby uzyskaฤ nazwฤ serwletu w JSP, moลผemy uลผyฤ config.getServletName, co pomoลผe nam uzyskaฤ nazwฤ serwletu.
Po wykonaniu powyลผszego kodu otrzymasz nastฤpujฤ cy wynik:
Wyjลcie:
- Nazwa serwletu to โGuruโServletโ jak sama nazwa wskazuje jest obecna w pliku web.xml
5) Aplikacja
- Obiekt aplikacji (linia kodu 10) jest instancjฤ javax.servlet.ServletContext i sลuลผy do pobierania informacji kontekstowych i atrybutรณw w JSP.
- Obiekt aplikacji jest tworzony przez jeden kontener na aplikacjฤ podczas wdraลผania aplikacji.
- Obiekt Servletcontext zawiera zestaw metod sลuลผฤ cych do interakcji z kontenerem serwletu. Moลผemy znaleลบฤ informacje o kontenerze serwletu
Przykลad:
<%@ 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>
Wyjaลnienie kodu:
- W powyลผszym kodzie atrybut aplikacji pomaga uzyskaฤ ลcieลผkฤ kontekstu strony JSP.
6) Sesja
- Sesja zawiera obiekt โhttpsessionโ (linia kodu 10).
- Obiekt sesji sลuลผy do pobierania, ustawiania i usuwania atrybutรณw zakresu sesji, a takลผe sลuลผy do uzyskiwania informacji o sesji
Przykลad:
Implicit_jsp7 (atrybut jest ustawiony)
<%@ 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>
Wyjaลnienie kodu:
Implicit_jsp7.jsp
Code Linia 11: ustawiamy atrybut user w zmiennej sesji, a wartoลฤ tฤ moลผna pobraฤ z sesji, niezaleลผnie od tego, z ktรณrego wywoลania zostanie wywoลany plik jsp (_jsp8.jsp).
Code Linia 12: Wywoลujemy kolejny jsp na href, w ktรณrym otrzymamy wartoลฤ ustawionego atrybutu user.
Implicit_jsp8.jsp
Code Linia 11: Pobieramy wartoลฤ atrybutu uลผytkownika z obiektu sesji i wyลwietlamy tฤ wartoลฤ
Po wykonaniu powyลผszego kodu otrzymasz nastฤpujฤ cy wynik:
Po klikniฤciu na link do nazwy uลผytkownika otrzymasz nastฤpujฤ cy wynik.
Wyjลcie:
- Klikajฤ c na link podany w implicit_jsp7.jsp nastฤpuje przekierowanie na drugฤ stronฤ jsp, czyli stronฤ (_jsp8.jsp) i z obiektu sesji pobieramy wartoลฤ atrybutu uลผytkownika (_jsp7.jsp).
7) Kontekst strony
- Obiekt ten jest typu pagecontext.
- Sลuลผy do pobierania, ustawiania i usuwania atrybutรณw z okreลlonego zakresu
Zakresy sฤ 4 typรณw:
- Strona
- PROลBA
- Sesja
- Zastosowanie
Przykลad:
<%@ 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>
Wyjaลnienie kodu:
Code Linia 11: ustawiamy atrybut za pomocฤ obiektu pageContext i ma on trzy parametry:
- Klawisz
- Wartoลฤ:
- Zakres
W powyลผszym kodzie kluczem jest student, a wartoลciฤ jest โgurustudentโ, natomiast zakres to zakres strony. Tutaj zakresem jest โstronaโ i moลผna go uzyskaฤ tylko przy uลผyciu zakresu strony.
Code Linia 12: Wartoลฤ atrybutu uzyskujemy za pomocฤ pageContext
Po wykonaniu powyลผszego kodu otrzymasz nastฤpujฤ cy wynik:
Wyjลcie:
- Wynik wyลwietli โnazwisko ucznia to gurustudentโ.
8) Strona
- Zmienna niejawna strony przechowuje aktualnie wykonywany obiekt serwletu dla odpowiedniego pliku jsp.
- Dziaลa jako ten obiekt dla bieลผฤ cej strony jsp.
Przykลad:
W tym przykลadzie uลผywamy obiektu strony, aby uzyskaฤ nazwฤ strony za pomocฤ metody toString
<%@ 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>
Wyjaลnienie kodu:
Code Linia 10-11: W tym przykลadzie prรณbujemy uลผyฤ metody toString() obiektu strony i uzyskaฤ nazwฤ ciฤ gu znakรณw strony JSP.
Po wykonaniu kodu otrzymasz nastฤpujฤ cy wynik:
Wyjลcie:
- Dane wyjลciowe to nazwa ciฤ gu powyลผszej strony jsp
9) Wyjฤ tek
- Wyjฤ tek jest ukrytym obiektem klasy, ktรณrฤ moลผna rzucaฤ.
- To jest uลผywane do obsลuga wyjฤ tkรณw w JSP.
- Obiekt wyjฤ tku moลผe byฤ uลผywany tylko na stronach bลฤdรณw.Przykลad:
<%@ 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>
Wyjaลnienie kodu:
Code Linia 10-12 โ Ma tablicฤ liczb, tj. num1 z czterema elementami. Na wyjลciu prรณbujemy wydrukowaฤ piฤ ty element tablicy z num1, ktรณry nie jest zadeklarowany na liลcie tablic. Wiฤc jest uลผywany do pobrania obiektu wyjฤ tku jsp.
Wyjลcie:
Otrzymujemy wyjฤ tek ArrayIndexOfBoundsException w tablicy, w ktรณrej otrzymujemy tablicฤ num1 piฤ tego elementu.











