stringtranslate.com

Страницы сервера Джакарты

Серверные страницы Jakarta ( JSP ; ранее JavaServer Pages ) [1] — это набор технологий, которые помогают разработчикам программного обеспечения создавать динамически генерируемые веб-страницы на основе HTML , XML , SOAP или других типов документов. Выпущенный в 1999 году компанией Sun Microsystems , [2] JSP похож на PHP и ASP , но использует язык программирования Java .

Для развертывания и запуска Jakarta Server Pages требуется совместимый веб-сервер с контейнером сервлетов , например Apache Tomcat или Jetty .

Обзор

Архитектура JSP Model 2.

С архитектурной точки зрения JSP можно рассматривать как высокоуровневую абстракцию сервлетов Jakarta . JSP транслируются в сервлеты во время выполнения, поэтому JSP является сервлетом; каждый сервлет JSP кэшируется и используется повторно до тех пор, пока исходный JSP не будет изменен. [3]

Серверные страницы Jakarta можно использовать независимо или как компонент представления в конструкции модель-представление-контроллер на стороне сервера , обычно с JavaBeans в качестве модели и сервлетами Java (или такой структурой, как Apache Struts ) в качестве контроллера. Это тип архитектуры Модели 2 . [4]

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

JSP обычно используются для доставки документов HTML и XML, но с помощью OutputStream они могут доставлять и другие типы данных. [5]

Веб -контейнер создает неявные объекты JSP, такие как запрос, ответ, сеанс, приложение, конфигурация, страница, контекст страницы, выход и исключение. JSP Engine создает эти объекты на этапе трансляции.

Синтаксис

Директивы, скриптлеты и выражения, объявление

JSP используют несколько разделителей для функций сценариев . Самым простым является файл <% ... %>, который включает в себя скриптлет JSP . Скриптлет — это фрагмент кода Java [6] , который запускается, когда пользователь запрашивает страницу.

Другие распространенные разделители включают в себя выражения <%= ... %>for , где скриптлет и разделители заменяются результатом вычисления выражения, а также директивы , обозначаемые <%@ ... %>. [6] [7]

Код Java не обязательно должен быть полным или самодостаточным в одном блоке скриптлетов. Он может охватывать содержимое разметки при условии, что страница в целом синтаксически правильна. Например, любые Java- блоки if/for/ while, открытые в одном скриптлете, должны быть корректно закрыты в следующем скриптлете, чтобы страница успешно скомпилировалась. Это позволяет смешивать код и может привести к ухудшению практики программирования.

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

Пример

Следующее будет допустимым циклом for на странице JSP:

<p> Считаем  до  трех: </p> <% for ( int i = 1 ; i < 4 ; i ++ ) { %> <p> Это число < %= i %> . </p> <% } %> <p> Хорошо. </p>               

Вывод, отображаемый в веб-браузере пользователя, будет следующим:

Считаем до трёх:Это число 1.Это число 2.Это число 3.ХОРОШО.

Стандартные теги JSP

Тег useBean

Тег JSP useBeanпозволяет разработчику получать доступ к Javabean и создавать его. [8] Хотя использование useBeanтега похоже на тег HTML, все теги JSP для JavaBeans используют синтаксис XML. Поэтому код, содержащий useBeanтег, чувствителен к регистру. [9]

Тег useBeanсодержит несколько атрибутов. Атрибут idобъявляет имя, которое используется для получения доступа к компоненту. Атрибут classобъявляет пакет и класс компонента. Объявляет scopeобъект, ответственный за хранение компонента. Значение области определяет продолжительность, в течение которой компонент доступен для использования остальной частью приложения Java. Областью действия может быть одно из следующих четырех значений: [9]

Теги getProperty и setProperty

После того, как компонент был создан с использованием useBeanтега, теги getPropertyи setPropertyможно использовать для получения и установки свойств компонента. JSP getPropertyиспользуется для получения свойств созданного компонента. Тег JSP setPropertyиспользуется для установки свойств компонента. Для тегов getProperty и setPropertyатрибут name используется для указания имени компонента. Таким образом, атрибут name должен соответствовать атрибуту id, предоставленному тегом useBean. [10]

Язык выражений

В версии 2.0 спецификации JSP добавлена ​​поддержка языка выражений (EL), используемого для доступа к данным и функциям в объектах Java. В JSP 2.1 он был свёрнут в Unified Expression Language , который также используется в JavaServer Faces . [11]

Язык выражений JSP использует компактный синтаксис, который позволяет разработчику получать атрибуты и свойства JavaBean из заданного объекта запроса. При использовании EL в начале кода необходимо добавить знак доллара («$»). За символом доллара следует открывающая скобка («{»), а также закрывающая скобка («}»). Затем код записывается между открывающими и закрывающими скобками. [12]

Пример

Ниже приведен пример синтаксиса EL :

Значение variableв объекте javabeanравно ${javabean.variable}.

Дополнительные теги

Синтаксис JSP добавляет дополнительные теги, называемые действиями JSP, для вызова встроенных функций. [7] Кроме того, технология позволяет создавать собственные библиотеки тегов JSP , которые действуют как расширения стандартного синтаксиса JSP. [13] Одной из таких библиотек является JSTL . [14]

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

Стандартная библиотека тегов Джакарты (JSTL) поддерживает общие задачи, которые необходимо выполнять в JSP. [15] Примеры включают итерацию и условные выражения (эквивалент операторов «for» и «if» в Java). [14]

Из всех библиотек JSTL наиболее часто используется базовая библиотека JSTL. Директива taglib должна использоваться для указания URI базовой библиотеки JSTL с использованием префикса. Хотя существует множество различных вариантов префикса, для этой библиотеки обычно используется префикс «c». [16]

XML-совместимый JSP

Страницы JSP также могут быть написаны с использованием полностью допустимого синтаксиса XML. [17] Такие файлы JSP обычно используют альтернативное .jspxрасширение файла, которое обычно заставляет сервер приложений проверять синтаксис XML.

Поскольку обычный синтаксис JSP <% ... %>недопустим в XML, разработчик должен использовать альтернативные теги, предоставляемые JSP. Например, <%@ page .. %>вместо этого общая директива может быть записана в виде <jsp:directive.page .. />тега, а библиотеки тегов импортируются с использованием пространств имен XML вместо обычного <%@ taglib .. %>тега.

Компилятор

Компилятор JavaServer Pages — это программа, которая анализирует JSP и преобразует их в исполняемые Java-сервлеты . Программа этого типа обычно встраивается в сервер приложений и запускается автоматически при первом доступе к JSP, но страницы также могут быть предварительно скомпилированы для повышения производительности или скомпилированы как часть процесса сборки для проверки на наличие ошибок. [18]

Некоторые контейнеры JSP поддерживают настройку того, как часто контейнер проверяет метки времени файла JSP , чтобы узнать, изменилась ли страница. Обычно для этой временной метки устанавливается короткий интервал (возможно, секунды) во время разработки программного обеспечения и более длительный интервал (возможно, минуты или даже никогда) для развернутого веб-приложения . [19]

Критика

По мнению Джоэла Мураха и Майкла Урбана, авторов книги «Java-сервлеты Мураха и JSP», встраивание Java-кода в JSP обычно является плохой практикой. [20] Лучшим подходом было бы перенести внутреннюю логику, встроенную в JSP, в код Java в формате Servlet. [20] В этом сценарии Servletотвечает за обработку, а JSP — за отображение HTML, [20] обеспечивая четкое разделение задач .

В 2000 году Джейсон Хантер, автор книги «Программирование сервлетов на Java», описал ряд «проблем» с JavaServer Pages. [21] Тем не менее, он написал, что, хотя JSP, возможно, и не является «лучшим решением для платформы Java», это «решение для Java, которое больше всего похоже на решение, не связанное с Java», под которым он имел в виду Active Server Pages от Microsoft . Позже он добавил на свой сайт заметку, в которой говорилось, что JSP улучшился с 2000 года, но также сослался на его конкурентов, Apache Velocity и Tea (язык шаблонов). [21] Сегодня несколько альтернатив и ряд JSP-ориентированных страниц в более крупных веб-приложениях считаются техническим долгом.

Смотрите также

Контейнеры сервлетов

Альтернативы шаблонам на основе Java

Рекомендации

  1. Мэтью Тайсон (9 сентября 2022 г.). «Что такое JSP? Введение в серверные страницы Джакарты». Инфомир . Проверено 30 мая 2024 г.
  2. ^ «Архив ForRK: Sun JSP 1.0 *не* доступен» . www.xent.com .
  3. ^ Жизненный цикл страницы JSP (документация Sun)
  4. Сешадри, Говинд (29 декабря 1999 г.). «Понимание архитектуры JavaServer Pages Model 2». JavaWorld . Проверено 17 июля 2020 г.
  5. ^ «Выходной поток уже получен (форум JSP на Coderanch)» . coderanch.com .
  6. ^ ab Murach & Urban 2014, стр. 180–182, §2 Основные навыки работы с сервлетами и JSP — Как использовать теги JSP.
  7. ^ ab Справочник по синтаксису JSP 1.2
  8. ^ Murach & Urban 2014, стр. 198, §2 Основные навыки работы с сервлетами и JSP — Резюме.
  9. ^ ab Murach & Urban 2014, стр. 186–187, §2 Основные навыки работы с сервлетами и JSP — Как кодировать тег useBean.
  10. ^ Murach & Urban 2014, стр. 188, §2 Основные навыки работы с сервлетами и JSP — Как кодировать теги getProperty и setProperty.
  11. ^ Унифицированный язык выражений (Sun Developer Network)
  12. ^ Murach & Urban 2014, стр. 176–177, §2 Основные навыки работы с сервлетами и JSP. Как использовать EL для получения атрибутов и свойств JavaBean.
  13. ^ Учебное пособие по библиотекам тегов. Что такое библиотека тегов? (Вс) Архивировано 19 апреля 2012 г. в Wayback Machine.
  14. ^ ab «Стандартная библиотека тегов JavaServer Pages — Учебное пособие по Java EE 5» . docs.oracle.com .
  15. ^ Murach & Urban 2014, стр. 270–273, §2 Основные навыки работы с сервлетами и JSP - Введение в JSTL.
  16. ^ Murach & Urban 2014, стр. 178, §2 Основные навыки работы с сервлетами и JSP — Как включить базовую библиотеку JSTL.
  17. ^ «Учебное пособие по Java EE 5, глава 6. Документы страниц JavaServer» . oracle.com . Проверено 27 июля 2022 г.
  18. ^ «Документы IBM». www.ibm.com .
  19. ^ "SyBooks Online" . infocenter.sybase.com .
  20. ^ abc Murach & Urban 2014, стр. 46–47, §1. Начните правильно — JSP для второй страницы.
  21. ^ ab Проблемы с JSP (25 января 2000 г.)

Цитируемые работы

дальнейшее чтение

Внешние ссылки