Что такое ЖСП? Введение в страницы сервера Джакарты

автор vadim


Серверные страницы Jakarta (ранее JavaServer Pages) — это стандартная технология Java, которую разработчики используют для написания динамических веб-страниц, управляемых данными, для веб-приложений Java. JSP построен на основе Java-сервлета (он же Jakarta Servlet) и является одной из веб-технологий Java, включенной для постоянной поддержки и обновлений в Jakarta EE.

JSP и сервлеты обычно работают вместе, особенно в старых веб-приложениях Java. С точки зрения кодирования, наиболее очевидное различие между JSP и сервлетами заключается в том, что с помощью сервлетов вы пишете код Java, а затем встраиваете в этот код разметку на стороне клиента (например, HTML). При использовании JSP вы начинаете со сценария или разметки на стороне клиента, а затем встраиваете теги JSP, чтобы подключить вашу страницу к серверной части Java.

Думайте о JSP как о способе написания разметки со сверхспособностями для взаимодействия с серверной частью. Обычно разметка, такая как HTML, отправляется клиенту, где она взаимодействует с внутренним сервером через JavaScript. JSP предварительно обрабатывает HTML с помощью специальных команд для доступа и использования возможностей сервера, а затем отправляет скомпилированную страницу клиенту.

JSP и JSF

JSP тесно связан с JSF или Jakarta Server Faces (ранее JavaServer Faces). JSF — это спецификация Java для создания веб-приложений модель-представление-контроллер (MVC). Это стандарт для веб-фреймворков Java, таких как Eclipse Mojarra, MyFaces и PrimeFaces. Хотя JSP нередко используется в качестве внешнего интерфейса для старых приложений JSF, Facelets является предпочтительной технологией представления для современных реализаций JSF.

Разработчики все еще используют JSP?

Разработчики до сих пор используют JSP для некоторых приложений. Это более простая технология, чем более современные подходы, такие как Jamstack, или механизм шаблонов, такой как Thymeleaf, но иногда лучше использовать простой подход.

JSP — это основная веб-технология Java. Как разработчики, мы можем создавать страницы JSP относительно быстро и легко, и они беспрепятственно взаимодействуют с сервлетами в контейнере сервлетов, таком как Tomcat. Можно сказать, что JSP — это эквивалент PHP и ASP в экосистеме Java в мире .NET.

Вы встретите JSP в старых веб-приложениях Java. Время от времени он может оказаться полезным для создания простых динамических веб-страниц Java. Как разработчик Java, вы должны быть знакомы с JSP и знать, как использовать его в своих программах.

Написание JSP-страниц

Простая страница JSP состоит из HTML-разметки, встроенной в теги JSP. Файлы JSP имеют расширение .jsp. Сервер JSP (также называемый контейнером JSP) настроен для направления HTTP-запроса на определенную страницу JSP, которая затем отвечает за обработку HTTP-ответа.

Когда поступает запрос, файл обрабатывается на сервере, и HTML отображается как представление приложения, то есть веб-страница. Встроенные теги JSP будут использоваться для вызова кода и данных на стороне сервера. Конечным продуктом JSP является стандартный HTML, который клиентский браузер может понимать как есть. Диаграмма на рисунке 1 показывает взаимодействие между HTML, JSP и сервером веб-приложений.

Схема страницы Jakarta Server Pages (JSP) в веб-приложении. ИДГ

Рис. 1. Обзор страницы Jakarta Server Pages (JSP) в веб-приложении.

В листинге 1 показана простая страница JSP.

Листинг 1. Простая страница JSP


<html>
  <body>
    <p>${2 * 2} should equal 4</p>
  </body>
</html>

Здесь вы видите блок HTML, который включает в себя JSP-выражение, который представляет собой инструкцию для сервера Java, написанную с использованием языка выражений (EL). В выражении ${2 * 2}, ${} — синтаксис JSP для интерполяции кода в HTML. Знак доллара с фигурными скобками сообщает процессору JSP: «Подождите секунду, мы собираемся начать говорить о чем-то особенном, о чем вам нужно позаботиться». внутри выражения. В этом случае результатом будет число 4.

JSP в контейнере сервлетов

Страницы JSP должны быть развернуты внутри контейнера сервлетов. Чтобы развернуть веб-приложение Java на основе JSP и сервлетов, вы упаковываете файлы .jsp, код Java и метаданные приложения в файл .war, который представляет собой простой файл .zip с традиционной для веб-приложений структурой.

После загрузки JSP в контейнер сервлетов он будет скомпилирован в сервлет. JSP и сервлеты имеют схожие характеристики, включая возможность доступа к объектам запроса и ответа на них.

Как использовать JSP с Tomcat

Мы будем использовать пример приложения на Tomcat, чтобы вы могли начать работу со страницами сервера Jakarta. Если у вас еще не установлен Tomcat, перейдите на страницу загрузки Tomcat и выберите установку Tomcat для вашей операционной системы. На момент написания этой статьи Tomcat 10 является текущей версией, совместимой с Jakarta Servlet 6 и Jakarta Server Pages 3.1.

Вы можете установить Tomcat как службу Windows или запустить его из командной строки с помощью /bin/catalina.sh начать или /bin/catalina.bat. В любом случае запустите Tomcat, затем перейдите по адресу localhost:8080, чтобы увидеть страницу приветствия Tomcat, показанную на рисунке 2.

Приветственная страница JSP Tomcat ИДГ

Рисунок 2. Страница приветствия Tomcat.

Неявные объекты в JSP

На странице приветствия Tomcat нажмите кнопку Примеры ссылку, затем нажмите Примеры JSP.

Далее откройте Неявные объекты выполняются веб приложение. На рис. 3 показаны выходные данные этого примера приложения. Уделите минуту изучению результатов. Описываемые им элементы всегда доступны по умолчанию внутри страницы JSP.

Пример вывода страницы JSP. ИДГ

Рисунок 3. Пример вывода страницы JSP.

Обратите внимание, что при переходе от JSP 2.0 к JSP 3.0, которая является текущим обновлением для Jakarta EE, не требуется никаких изменений кода. В примере неявного объекта используется JSP 2.0.

Параметры запроса

Неявные объекты являются встроенными объектами, доступными через страницу JSP. Когда вы разрабатываете веб-страницу, вы будете использовать эти объекты для доступа к таким вещам, как параметры запросакоторые представляют собой данные, передаваемые из клиентского браузера при выдаче HTTP-запроса.

Рассмотрим URL-адрес браузера для приложения Implicit Objects: http://localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

Обратите внимание, что на этой странице нет ничего особенного; мы просто используем его, чтобы увидеть, как осуществляется доступ к параметру URL. Параметр ?foo=barи вы можете увидеть это в выводе на веб-странице, где в таблице показано EL-выражение и значение bar. Чтобы проверить это, измените URL-адрес на http://localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, нажмите Входитьи вы увидите изменение, отраженное в выводе.

Этот пример представляет собой очень простое введение в использование тегов JSP для доступа к параметрам запроса на стороне сервера. В этом случае страница JSP использует встроенный (неявный) объект, называемый param для доступа к параметрам запроса веб-приложения. param объект доступен внутри синтаксиса выражения JSP, который вы видели в листинге 1. В этом примере мы использовали выражение для некоторых математических вычислений: ${2 * 2}что привело к выводу 4. В этом случае выражение используется для доступа к объекту и полю этого объекта: ${param.foo}. Далее мы более внимательно рассмотрим пример неявных объектов.

JSP в веб-приложении

На странице «Неявные объекты» щелкните стрелку назад, а затем кнопку Источник связь. Это приведет вас к JSP-коду веб-приложения Implicit Objects, показанному в листинге 2.

Листинг 2. JSP-код для веб-приложения Implicit Objects


<%@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"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])}&nbsp;</td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])}&nbsp;</td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>

JSP-функции

Если вы знакомы с HTML, то код в листинге 2 должен быть достаточно понятен. У вас есть ожидаемый HTML <td> элементы, за которыми следует ${ } Синтаксис выражений JSP, представленный в листинге 1. Но обратите внимание на ценить для param.foo:


<td>${fn:escapeXml(param["foo"])}&nbsp;</td>

Здесь fn:escapeXML() это функция JSP.

А JSP-функция инкапсулирует часть многократно используемой функциональности. В этом случае функция заключается в экранировании XML. JSP предлагает множество функций, и вы также можете создавать функции самостоятельно. Чтобы использовать функцию, вы импортируете ее библиотеку на свою страницу JSP, а затем вызываете функцию.

В листинге 2 мы включаем escapeXML функция со следующей строкой:


<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

Синтаксис довольно ясен: он импортирует необходимые функции и присваивает им префикс (в данном случае “fn“), который можно использовать во всех следующих выражениях.

Стандартная библиотека тегов Джакарты (JSTL)

Строка импорта в листинге 2 вызывает taglibчто является сокращением от библиотека тегов. В данном случае мы импортировали стандартную библиотеку тегов Джакарты (JSTL). Библиотеки тегов определяют повторно используемые функциональные возможности JSP. JSTL — это стандартная библиотека тегов, содержащая набор библиотек тегов, которые поставляются с каждым сервлетом и реализацией JSP, включая Tomcat.

Библиотека «функций» — это лишь одна из библиотек тегов, включенных в JSTL. Другая распространенная библиотека тегов — это основная библиотека, которую вы импортируете, вызывая:


<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>

Нравиться "fn", "c" обозначение условное; вы увидите его на большинстве страниц JSP.

Защита страниц JSP с помощью JSTL

Следующий пример тега взят из базовой библиотеки JSTL:


<c:out value = "${'<div>'}"/>

Related Posts

Оставить комментарий