JavaRush /Blog Java /Random-PL /Co to jest JSP? Przeanalizujmy możliwości w praktyce
Анзор Кармов
Poziom 31
Санкт-Петербург

Co to jest JSP? Przeanalizujmy możliwości w praktyce

Opublikowano w grupie Random-PL
JSP lub Java Server Pages to technologia Java, która umożliwia tworzenie dynamicznych stron internetowych dla aplikacji Java. W tym artykule porozmawiamy bardziej szczegółowo o tym, czym jest JSP, omówimy niektóre możliwości tej technologii, przyjrzymy się strukturze stron JSP, a także spróbujemy przyjrzeć się w praktyce, czym są te strony serwera Java. Co to jest JSP?  Zrozumienie możliwości w praktyce - 1Ale najpierw porozmawiajmy o korzyściach i znaczeniu JSP. JSP umożliwia programiście:
  • odbierać dane ze strony internetowej do kodu Java;
  • wysyłaj dane z kodu Java na stronę internetową;
  • napisz kod Java bezpośrednio w HTML (jednak nie powinieneś tego nadużywać).
Zapotrzebowanie na wiedzę JSP można ocenić dość wysoko z kilku powodów:
  • JSP to jedna z głównych technologii internetowych Java;
  • JSP jest szeroko stosowany w większości firm i projektów;
  • JSP płynnie integruje się z serwletami Java w kontenerze serwletów.

Definicja JSP

Oto definicja z Wikipedii: JSP (JavaServer Pages) to technologia, która umożliwia twórcom stron internetowych tworzenie treści zawierających zarówno komponenty statyczne, jak i dynamiczne. Strona JSP zawiera dwa typy tekstu: statyczne dane źródłowe, które mogą być w jednym z formatów tekstowych HTML, SVG, WML lub XML, oraz elementy JSP, które tworzą dynamiczną treść. Ponadto można używać bibliotek znaczników JSP, a także języka wyrażeń (EL) do osadzania kodu Java w statycznej zawartości stron JSP. Kod strony JSP jest tłumaczony na kod Java serwletu przy użyciu kompilatora strony Jasper JSP, a następnie kompilowany do kodu bajtowego wirtualnej maszyny Java (JVM). Kontenery serwletów zdolne do wykonywania stron JSP są napisane w niezależnym od platformy języku Java. Technologia JSP to niezależna od platformy, przenośna i łatwa w rozszerzeniu technologia służąca do tworzenia aplikacji internetowych.

Struktura strony JSP

Ogólnie rzecz biorąc, JSP odnosi się do dynamicznych stron internetowych, w których część dynamiczna jest generowana przy użyciu języka Java, a część statyczna jest generowana przy użyciu języków znaczników, najczęściej HTML. Taka strona to dokument tekstowy z rozszerzeniem .jsp, napisany w jednym z języków znaczników (takich jak HTML, SVG, WML i XML), przeplatany elementami JSP (lub tagami JSP). Tagi te zawierają wywołania kodu serwera (danych), a także wykonują pewne obliczenia. Pliki te są przetwarzane na serwerze, w wyniku czego wszystkie znaczniki JSP są konwertowane na znaczniki HTML, a wynikiem jest zwykła strona HTML. Poniższy diagram przedstawia schemat struktury strony JSP i jej interakcji z serwerem. Co to jest JSP?  Zrozumienie możliwości w praktyce - 2Przykład prostej strony JSP:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
W tym przykładzie wyrażenie JSP napisane w specjalnym języku Expression Language (EL) jest „osadzone” w kodzie HTML . Zapewnia ważny mechanizm interakcji pomiędzy warstwą prezentacji (stronami internetowymi) a warstwą logiki biznesowej aplikacji (kod Java). Jak widać na przykładzie, wyrażenie JSP jest ujęte w nawiasy klamrowe, z wiodącym znakiem dolara - ${...}. Wszystko, co jest w nawiasach klamrowych, jest oceniane na serwerze, a wynik tego wyrażenia jest podawany w formacie HTML, w miejscu, w którym pierwotnie zdefiniowano wyrażenie JSP. Po przetworzeniu wszystkich tagów strona będzie wyglądać następująco:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

Instalowanie i uruchamianie kontenera serwletów

Ponieważ kod JSP jest tłumaczony na kod serwletu Java, musimy gdzieś zdobyć jakiś kontener serwletów, abyśmy mogli porozmawiać o tym, jak działa JSP. W przeciwnym razie bez kontenera JSP nie będzie działać. Ale najpierw przyjrzyjmy się definicji kontenera serwletów. Kontener serwletów to program będący serwerem zapewniający systemową obsługę serwletów i zapewniający ich cykl życia zgodnie z zasadami określonymi w specyfikacjach. Może pracować jako pełnoprawny niezależny serwer WWW, być dostawcą stron dla innego serwera WWW lub integrować się z serwerem aplikacji Java EE. Jednym z najpopularniejszych kontenerów serwletów jest Apache Tomcat. Co to jest JSP?  Zrozumienie możliwości w praktyce - 3Warto wspomnieć, że Tomcat nie jest pełnoprawnym serwerem aplikacji Java EE. Jednak do podstawowych potrzeb serwletów i stron JSP serwer Tomcat jest więcej niż wystarczający. Rozpocznijmy instalację. Możesz pobrać Tomcat z oficjalnej strony . W przypadku systemu operacyjnego Windows możesz zainstalować Tomcat w następujący sposób:
  1. Pobierz 32-bitowy/64-bitowy instalator usługi Windows.

  2. Uruchommy plik.

  3. Następnie postępuj zgodnie ze zwykłą procedurą instalacji:

    1. Nie zapomnij zaznaczyć pola wyboru Przykłady w odpowiednim oknie instalatora:

      Co to jest JSP?  Zrozumienie możliwości w praktyce - 4
    2. i określ ścieżkę do preinstalowanego środowiska JRE:

      Co to jest JSP?  Zrozumienie możliwości w praktyce - 5
  4. Po instalacji uruchom Tomcat i otwórz przeglądarkę. Przejdź do http://localhost:8080/ .

Jeśli zobaczysz stronę startową Tomcat, oznacza to, że instalacja przebiegła pomyślnie i serwer działa. Aby ręcznie uruchomić i zatrzymać Tomcat, możesz uruchomić jeden z dwóch plików wykonywalnych w katalogu bin. Znajduje się on w katalogu, w którym zainstalowany jest Tomcat: Co to jest JSP?  Zrozumienie możliwości w praktyce - 6

Aplikacje demonstracyjne. Ukryte obiekty

Przyjrzyjmy się niektórym funkcjom JSP w działaniu. Jednym z nich jest dostęp do tzw. obiektów ukrytych (ang. Implicit Objects ). Są to obiekty, do których można uzyskać dostęp za pomocą języka wyrażeń (EL). Przykładami takich obiektów są nagłówki HTTP lub parametry adresu URL. Zdradźmy (lub odświeżmy pamięć), czym są parametry adresu URL. Poniższy przykład pokazuje adres URL z parametrami. Parametry są pogrubione: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Parametry zawsze rozpoczynają się znakiem zapytania (?). Po nim następuje nazwa parametru, a po nim znak równości - określana jest wartość parametru. Może być kilka lub jeden parametr. Jeśli jest ich więcej, każda para nazwa-wartość jest oddzielona znakiem ampersand (&). W powyższym przykładzie zdefiniowano kilka parametrów i ich wartości:
Nazwa parametru Wartość parametru
param1 wartość1
param2 wartość2
A 1
nazwa Tomek
Przyjrzyjmy się, jak uzyskać dostęp do ukrytych obiektów w JSP, w tym parametrów adresu URL. Aby to zrobić, uruchom Tomcat i otwórz przeglądarkę na stronie http://localhost:8080/ Następnie przejdź do strony Przykłady: Co to jest JSP?  Zrozumienie możliwości w praktyce - 7Następnie kliknij link Przykłady JSP: Co to jest JSP?  Zrozumienie możliwości w praktyce - 8Na stronie przykładów kliknij link Implicit Objects -> Execute: Co to jest JSP?  Zrozumienie możliwości w praktyce - 9Na tym na stronie możesz zobaczyć przykład użycia ukrytych obiektów. Poniżej znajduje się zrzut ekranu strony ze szczegółowymi objaśnieniami: Co to jest JSP?  Zrozumienie możliwości w praktyce - 10Spróbuj zmienić wartość parametru fooza pomocą odpowiedniego pola na stronie, a następnie zwróć uwagę, że wartość tego parametru zmieniła się również w pasku adresu. Prezentowana strona nie ma zbyt wielu funkcjonalności, ale jest dobrą referencją, do której możesz się odwołać w przyszłości, gdy będziesz potrzebować dostępu do konkretnego ukrytego obiektu. Ta strona zawiera listę ukrytych obiektów, do których można uzyskać dostęp. Poniżej w tabeli pokazano, w jaki sposób można uzyskać dostęp do konkretnego obiektu.

Funkcje JSP

Wróćmy teraz do poprzedniej strony i przyjrzyjmy się kodowi źródłowemu strony „ukryte obiekty”: Co to jest JSP?  Zrozumienie możliwości w praktyce - 11Oto on:
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head>
    <title>JSP 2.0 Expression Language - Implicit Objects</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    <hr>
    This example illustrates some of the implicit objects available
    in the Expression Language.  The following implicit objects are
    available (not all illustrated here):
    <ul>
      <li>pageContext - the PageContext object</li>
      <li>pageScope - a Map that maps page-scoped attribute names to
          their values</li>
      <li>requestScope - a Map that maps request-scoped attribute names
          to their values</li>
      <li>sessionScope - a Map that maps session-scoped attribute names
          to their values</li>
      <li>applicationScope - a Map that maps application-scoped attribute
          names to their values</li>
      <li>param - a Map that maps parameter names to a single String
          parameter value</li>
      <li>paramValues - a Map that maps parameter names to a String[] of
          all values for that parameter</li>
      <li>header - a Map that maps header names to a single String
          header value</li>
      <li>headerValues - a Map that maps header names to a String[] of
          all values for that header</li>
      <li>initParam - a Map that maps context initialization parameter
          names to their String parameter value</li>
      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    </ul>

    <blockquote>
      <u><b>Change Parameter</b></u>
      <form action="implicit-objects.jsp" method="GET">
          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
          <input type="submit">
      </form>
      <br>
      <code>
        <table border="1">
          <thead>
            <td><b>EL Expression</b></td>
            <td><b>Result</b></td>
          </thead>
          <tr>
            <td>\${param.foo}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])} </td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])} </td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])} </td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>
Jeśli znasz HTML, kod źródłowy strony powinien być dla Ciebie całkiem jasny. Zwróć uwagę na te linie:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
Tutaj widzimy tagi HTML <tr>i <td>. Po znacznikach następują <td>znaczniki JSP ujęte w nawiasy klamrowe ${ }. Zwróć jednak uwagę, jak wyświetlana jest wartość parametru URL foo:
${fn:escapeXml(param["foo"])}
Wartość jest wyprowadzana za pomocą funkcji JSP fn:escapeXml(). Funkcje JSP zawierają pewne funkcjonalności, które można ponownie wykorzystać. W tym przypadku jest to ucieczka XML. Technologia JSP zapewnia szeroką gamę funkcji do wyboru, a także możliwość tworzenia własnych funkcji. Aby użyć funkcji na stronie JSP, należy zaimportować do pliku JSP odpowiednią bibliotekę, w której funkcja jest zdefiniowana.

Biblioteki tagów

Przyjrzyjmy się innej linii kodu źródłowego (drugiej linii) powyżej:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
W ten sposób importowane są biblioteki znaczników. Składnia jest intuicyjna. Definiujemy kilka rzeczy:
  • taglib(biblioteka znaczników - biblioteka znaczników);
  • url, gdzie znajduje się ta biblioteka;
  • prefiks (w tym przypadku fn), za pomocą którego będzie można wywoływać funkcje zdefiniowane w tej bibliotece.
W powyższym przykładzie przyjrzeliśmy się importowaniu funkcji. W naszym przykładzie zaimportowaliśmy bibliotekę JSTL (JSP Standard Tag Library). JSTL to standardowa biblioteka znaczników zawierająca zestaw różnych bibliotek dołączonych do każdego serwletu i implementacji JSP, w tym Tomcat. Inną popularną biblioteką znaczników jest core, którą można zaimportować w następujący sposób:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Podobnie jak w przypadku fn, zapis cjest opcjonalny i ogólnie akceptowany. Oznaczenie to można znaleźć niemal wszędzie tam, gdzie używane są te biblioteki. Oto przykład funkcji z biblioteki podstawowej:
<c:out value = "${'<div>'}"/>
Ta funkcja po prostu wyświetli znacznik <div>. Ta funkcja już wykonuje ucieczkę XML. Funkcja ta jest ważna z punktu widzenia bezpieczeństwa, ponieważ wypisując bezpośrednio wartość zmiennych poprzez ${variable}, otwieramy drzwi do wstrzyknięcia skryptu.

Edycja JSP

Teraz uzbrojeni w nową wiedzę spróbujmy wprowadzić zmiany w aplikacji demonstracyjnej wewnątrz Tomcata. Aby to zrobić, znajdziemy kod źródłowy tej strony w folderze, w którym został zainstalowany ten kontener serwletu. Plik ten można znaleźć pod następującym adresem: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Następnie otwórz plik implicit-objects.jsp w dowolnym edytorze tekstu Dodaj import biblioteki podstawowej , a następnie go użyj. Wypiszmy jakiś tekst: Co to jest JSP?  Zrozumienie możliwości w praktyce - 12Teraz odświeżmy stronę z ukrytymi obiektami i przyjrzyjmy się wprowadzonym zmianom: Co to jest JSP?  Zrozumienie możliwości w praktyce - 13

Wyniki

Tak więc powierzchownie zbadaliśmy taką technologię jak JSP. Omawialiśmy:
  • czym jest JSP;
  • Struktura strony JSP;
  • procedura instalowania i uruchamiania kontenera serwletów Tomcat;
  • aplikacja demonstracyjna umożliwiająca dostęp do ukrytych obiektów, która jest zawarta w pakiecie dystrybucyjnym serwera Tomcat;
  • Funkcje JSP i biblioteki znaczników.

Co dalej?

Aby zabezpieczyć materiał możesz:
  1. Powtórz wszystko, co opisano w tym artykule.
  2. Rozważ inne aplikacje demonstracyjne dołączone do serwera Tomcat.
  3. Napisz własną aplikację i wdróż ją w kontenerze serwletów. Jako przewodnik możesz skorzystać z artykułu Tworzenie prostego projektu internetowego w IntelliJ Idea Enterprise. Krok po kroku, ze zdjęciami.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION