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.

  • ๐Ÿ–จ๏ธ Obiekt zewnฤ™trzny: Zapisuje dane do bufora i wysyล‚a dane wyjล›ciowe do klienta za pomocฤ… JspWriter Strumieล„.
  • ๐Ÿ“ฅ Obiekt ลผฤ…dania: Instancja HttpServletRequest pobierajฤ…ca parametry, nagล‚รณwki i szczegรณล‚y serwera za pomocฤ… metody getParameter().
  • ๐Ÿ“ค Obiekt odpowiedzi: Implementuje HttpServletResponse w celu ustawienia typu zawartoล›ci, dodania plikรณw cookie i przekierowania klienta.
  • โš™๏ธ Konfiguracja i aplikacja: Config odczytuje parametry inicjalizacji z pliku web.xml; aplikacja udostฤ™pnia dane kontekstowe w caล‚ym wdroลผeniu.
  • ๐Ÿ—‚๏ธ. Sesja i kontekst strony: Sesja przechowuje atrybuty uลผytkownika na rรณลผnych stronach; PageContext zarzฤ…dza atrybutami na rรณลผnych stronach, ลผฤ…daniach, sesjach i zakresach aplikacji.
  • โš ๏ธ Obiekt wyjฤ…tku: Obiekt Throwable dostฤ™pny tylko na stronach bล‚ฤ™dรณw, ktรณre raportujฤ… bล‚ฤ™dy czasu wykonania, takie jak ArrayIndexOutOfBounds.

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:

  1. wyczerpane
  2. PROลšBA
  3. Odpowiedลบ
  4. Config
  5. Zastosowanie
  6. Sesja
  7. Kontekst strony
  8. Strona
  9. 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:

W JSP

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)

Zapytanie w JSP

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:

Zapytanie w JSP

Po napisaniu testu i klikniฤ™ciu przycisku โ€žPrzeล›lijโ€ pojawi siฤ™ nastฤ™pujฤ…cy komunikat: โ€žTest powitalnyโ€.

Zapytanie w JSP

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)

Skonfiguruj w JSP

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:

Odpowiedลบ w JSP

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:

Sesja w JSP

Po klikniฤ™ciu na link do nazwy uลผytkownika otrzymasz nastฤ™pujฤ…cy wynik.

Sesja w JSP

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:

PageContext w JSP

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:

Strona w JSP

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:

Wyjฤ…tek w JSP

Otrzymujemy wyjฤ…tek ArrayIndexOfBoundsException w tablicy, w ktรณrej otrzymujemy tablicฤ™ num1 piฤ…tego elementu.

FAQ

Nie. Kontener automatycznie tworzy wszystkie dziewiฤ™ฤ‡ obiektรณw niejawnych podczas fazy tล‚umaczenia. Programiล›ci mogฤ… ich uลผywaฤ‡ bezpoล›rednio w skryptletach i metodach usล‚ugi, bez importowania pakietรณw ani deklarowania zmiennych.

Nie. Obiekty niejawne sฤ… dostฤ™pne tylko w skryptletach i wyraลผeniach, ktรณre mapujฤ… siฤ™ na metodฤ™ usล‚ugi. Nie moลผna ich uลผywaฤ‡ w znacznikach deklaracji JSP, ktรณre generujฤ… elementy klasy poza tฤ… metodฤ….

PageContext dziaล‚a we wszystkich czterech zakresach โ€“ stronie, ลผฤ…daniu, sesji i aplikacji. Udostฤ™pnia metody setAttribute, getAttribute i removeAttribute, co czyni go najbardziej elastycznym obiektem niejawnym do zarzฤ…dzania danymi na rรณลผnych poziomach zakresu.

Sztuczna inteligencja potrafi objaล›niaฤ‡ kaลผdy obiekt niejawny za pomocฤ… przykล‚adรณw, konwertowaฤ‡ kod skryptletu na bardziej przejrzyste alternatywy i natychmiast odpowiadaฤ‡ na pytania dotyczฤ…ce zakresu. Pomaga to poczฤ…tkujฤ…cym zrozumieฤ‡, kiedy poprawnie uลผywaฤ‡ obiektรณw ลผฤ…dania, sesji lub aplikacji.

Tak. Narzฤ™dzia AI mogฤ… generowaฤ‡ dziaล‚ajฤ…ce fragmenty kodu JSP, wykorzystujฤ…c obiekty out, request, session i inne obiekty niejawne, a nastฤ™pnie objaล›niaฤ‡ kaลผdy wiersz kodu. Programiล›ci powinni nadal sprawdzaฤ‡ dane wyjล›ciowe pod kฤ…tem poprawnego obsล‚ugiwania zakresu i bezpieczeล„stwa.

Podsumuj ten post nastฤ™pujฤ…co: