Niejawne obiekty JSP
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 klasy javax.servlet.jsp.jspWriter
- 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:
Linia kodu 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 podejmowana jest akcja)
Wyjaśnienie kodu:
Linia kodu 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
Linia kodu 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:
Linia kodu 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 mapowanie 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
Linia kodu 14-17: W pliku web.xml mamy mapowanie serwletów na klasy.
Implicit_jsp5.jsp
Linia kodu 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 „GuruServlet”, ponieważ nazwa ta występuje 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
Linia kodu 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).
Linia kodu 12: Wywołujemy kolejny jsp na href, w którym otrzymamy wartość ustawionego atrybutu user.
Implicit_jsp8.jsp
Linia kodu 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:
Linia kodu 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.
Linia kodu 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:
Linia kodu 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:
Linia kodu 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.