Страницы сервера Джакарты
Расширение имени файла | .jsp, .jspx, .jspf |
---|---|
Тип интернет-СМИ | приложение/jsp [ нужна ссылка ] |
Разработано | Фонд Затмения |
Первоначальный выпуск | 1999 год |
Последний выпуск | 4.0 9 апреля 2024 г |
Тип формата | Динамическая веб-страница |
Стандартный | ДжСР 245 |
Открытый формат ? | Да |
Веб-сайт | проекты |
Страницы сервера Джакарты ( JSP ; ранее страницы JavaServer ) [1] представляет собой набор технологий, которые помогают разработчикам программного обеспечения создавать динамически генерируемые веб-страницы на основе HTML , XML , SOAP или других типов документов. Выпущен в 1999 году компанией Sun Microsystems . [2] JSP похож на PHP и ASP , но использует язык программирования Java .
совместимый веб-сервер с контейнером сервлетов , например Apache Tomcat или Jetty Для развертывания и запуска Jakarta Server Pages требуется .
Обзор
[ редактировать ]С архитектурной точки зрения 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] который запускается, когда пользователь запрашивает страницу.
Другие распространенные разделители включают в себя <%= ... %>
для выражений, где скриптлет и разделители заменяются результатом вычисления выражения, и директивы , обозначаемые значком <%@ ... %>
. [6] [7]
Код Java не обязательно должен быть полным или самодостаточным в одном блоке скриптлетов. Он может охватывать содержимое разметки при условии, что страница в целом синтаксически правильна. Например, Java if/for/ while для успешной компиляции страницы любые блоки , открытые в одном скриптлете, должны быть корректно закрыты в следующем скриптлете. Это позволяет смешивать код и может привести к ухудшению практики программирования.
Содержимое, которое попадает в разделенный блок кода Java (охватывающий несколько скриптлетов), подчиняется этому коду. Содержимое внутри блока if появится в выходных данных только тогда, когда условие if станет истинным. Аналогично, содержимое внутри конструкции цикла может появляться в выходных данных несколько раз, в зависимости от того, сколько раз выполняется тело цикла.
Пример
[ редактировать ]Следующее будет допустимым циклом for на странице JSP:
<p>Counting to three:</p><% for (int i=1; i<4; i++) { %> <p>This number is <%= i %>.</p><% } %><p>OK.</p>
Вывод, отображаемый в веб-браузере пользователя, будет следующим:
Counting to three:This number is 1.This number is 2.This number is 3.OK.
Стандартные теги JSP
[ редактировать ]Тег useBean
[ редактировать ]JSP useBean
Тег позволяет разработчику получить доступ к Javabean и создать его. [8] Хотя использование useBean
Тег похож на тег HTML, все теги JSP для JavaBeans используют синтаксис XML. Поэтому код, содержащий useBean
тег чувствителен к регистру. [9]
The useBean
тег содержит несколько атрибутов. id
Атрибут объявляет имя, которое используется для получения доступа к компоненту. class
Атрибут объявляет пакет и класс компонента. scope
объявляет объект, ответственный за хранение компонента. Значение области определяет продолжительность, в течение которой компонент доступен для использования остальной частью приложения Java. Областью действия может быть одно из следующих четырех значений: [9]
- The
page
область видимости подразумевает, что компонент расположен в неявно определенной области.PageContext
объект и доступен только для текущей страницы. По умолчанию все bean-компоненты имеют область действияpage
. - The
request
область видимости подразумевает, что компонент можно найти вHttpServletRequest
объект. Доступ к этому bean-компоненту могут получить все другие JSP и сервлеты, имеющие доступ к текущему объекту запроса. - The
session
область видимости подразумевает, что компонент можно найти вHttpSession
объект. Доступ к этому bean-компоненту могут получить все другие JSP и сервлеты, имеющие доступ к указанномуHttpSession
объект. - The
application
область видимости подразумевает, что компонент можно найти вServletContext
объект. Доступ к этому bean-компоненту могут получить все другие JSP и сервлеты, имеющие доступ к указанномуServletContext
объект.
Теги 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-ориентированных страниц в более крупных веб-приложениях считаются техническим долгом.
См. также
[ редактировать ]Контейнеры сервлетов
[ редактировать ]- Апач Томкэт
- Апач TomEE
- Причал (веб-сервер)
- СтеклоРыба
- Веб-сервер Oracle iPlanet
- Сервер приложений WebSphere
Альтернативы шаблонам на основе Java
[ редактировать ]Ссылки
[ редактировать ]- ^ Мэтью Тайсон (9 сентября 2022 г.). «Что такое JSP? Введение в серверные страницы Джакарты» . Инфомир . Проверено 30 мая 2024 г.
- ^ «Архив ForRK: Sun JSP 1.0 *не* доступен» . www.xent.com .
- ^ Жизненный цикл страницы JSP (документация Sun)
- ^ Сешадри, Говинд (29 декабря 1999 г.). «Понимание архитектуры JavaServer Pages Model 2» . JavaWorld . Проверено 17 июля 2020 г.
- ^ «Выходной поток уже получен (форум JSP на Coderanch)» . coderanch.com .
- ^ Перейти обратно: а б Справочник по синтаксису JSP 1.2
- ^ Murach & Urban 2014 , стр. 198, §2 Основные навыки работы с сервлетами и JSP — Резюме.
- ^ Перейти обратно: а б Murach & Urban 2014 , стр. 186–187, §2 Основные навыки работы с сервлетами и JSP. Как кодировать тег useBean.
- ^ Унифицированный язык выражений (Sun Developer Network)
- ^ Murach & Urban 2014 , стр. 176–177, §2 Основные навыки работы с сервлетами и JSP — Как использовать EL для получения атрибутов и свойств JavaBean.
- ^ Учебное пособие по библиотекам тегов. Что такое библиотека тегов? (Вс) Архивировано 19 апреля 2012 г. в Wayback Machine.
- ^ Перейти обратно: а б «Стандартная библиотека тегов JavaServer Pages — Учебное пособие по Java EE 5» . docs.oracle.com .
- ^ Murach & Urban 2014 , стр. 270–273, §2 Основные навыки работы с сервлетами и JSP - Введение в JSTL.
- ^ Murach & Urban 2014 , стр. 178, §2 Основные навыки работы с сервлетами и JSP — Как включить базовую библиотеку JSTL.
- ^ «Учебное пособие по Java EE 5, глава 6. Документы страниц JavaServer» . oracle.com . Проверено 27 июля 2022 г.
- ^ «Документация IBM» . www.ibm.com .
- ^ «Сибукс онлайн» . infocenter.sybase.com .
- ^ Перейти обратно: а б с Murach & Urban 2014 , стр. 46–47, §1. Начните правильно — JSP для второй страницы.
- ^ Перейти обратно: а б Проблемы с JSP (25 января 2000 г.)
Цитируемые работы
[ редактировать ]- Мурач, Джоэл; Урбан, Майкл (2014). Java-сервлеты и JSP Мураха . Майк Мурак и партнеры. ISBN 978-1-890774-78-3 .
Дальнейшее чтение
[ редактировать ]- Бергстен, Ганс (2003). Страницы JavaServer (3-е изд.). О'Рейли Медиа . ISBN 978-0-596-00563-4 .
- Браун, Саймон; Далтон, Сэм; Джепп, Дэниел; Джонсон, Дэйв; Ли, Синг; Рэйбл, Мэтт. Про JSP 2 . Апресс . ISBN 1-59059-513-0 .
- Ханна, Фил (2003). JSP 2.0 — Полный справочник . Макгроу-Хилл Осборн Медиа . ISBN 978-0-07-222437-5 .
- Сьерра, Кэти; Бейтс, Берт; Бэшем, Брайан. Head First сервлеты и JSP . О'Рейли Медиа . ISBN 978-0-596-00540-5 .