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:

  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 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:

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 podejmowana jest akcja)

Zapytanie w JSP

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:

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:

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)

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

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:

Odpowiedź w JSP

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:

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:

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:

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:

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:

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:

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:

Wyjątek w JSP

Otrzymujemy wyjątek ArrayIndexOfBoundsException w tablicy, w której otrzymujemy tablicę num1 piątego elementu.