Java Server Pages (JSP) — технология, позволяющая создавать веб-страницы и Java-приложения со статическим и динамическим содержимым. С ее помощью разработчик может встраивать код Java в обычную HTML-страницу, используя специальные JSP-теги. JavaServer Pages была разработана компанией Sun Microsystem в 1999 году как ответ на коммерчески успешную аналогичную технологию ASP, созданную компанией Microsoft. Сегодня JSP является одним из наиболее распространенных инструментов для создания динамических веб-страниц за счет своей кроссплатформенности, переносимости и легкой масштабируемости.
Что такое JSP
Типичная веб-страница представляет собой статичный HTML-документ, который в полностью готовом виде хранится на сервере. При запросе пользователя сервер просто «отдает» их его браузеру, который и отображает конечный результат. Чтобы изменить статический контент веб-страницы, необходимо иметь к нему доступ на сервере. Данная технология имеет свои преимущества — в частности, такие страницы проще создавать (не нужно знать языки программирования), они менее требовательны к характеристикам сервера, быстрее загружаются и т.д. Вместе с тем статическое содержимое труднее редактировать, так как это приходится делать постранично, то есть менять его на каждой странице.
Динамические веб-страницы работают иначе — они генерируются в ответ на запрос пользователя из готовых шаблонов, скриптов, файлов и т.д. Чтобы такой документ отобразился в веб-браузере, сервер должен не просто отдать в ответ на запрос готовое содержимое, а как бы собрать его из нужных частей, которые прописаны в HTML-коде. Такой подход существенно расширяет функциональность веб-приложений и делает их более адаптивными. Но при этом требует больших затрат серверных ресурсов и установки на ПК пользователя промежуточного ПО.
Java Server Pages — технология, позволяющая объединить в одном веб-документе как статическое, так и динамическое содержимое. Первое представляет собой данные, размеченные в текстовых форматах HTML, SVG, WML, или XML. Динамическое содержимое конструируется JSP-элементами, а также с помощью JSP-тегов и скриптового языка Expression Language. Если проще, то эта технология позволяет разработчикам внедрять Java-код непосредственно в HTML-код, что работает существенно проще и быстрее, чем подгрузка динамических компонентов из отдельного файла.
Как работает JSP Java
Веб-страницы, созданные с применением технологии JSP, представляют собой HTML-текст с внедренными в него фрагментами кода Java. Когда пользователь отправляет серверу запрос к конкретной JSP-странице, тот ее обрабатывает, превращая в стандартный HTML-документ и присылает браузеру. В итоге пользователь видит перед собой обычную HTML-страницу.
JSP-страницы, как и обычные статические, хранятся на веб-сервере, доступ пользователей к которому осуществляется по протоколу http (или защищенному https). Однако, для обработки таких документов на сервере должен быть установлен JSP-движок (JSP-контейнер). Это специальный программный модуль, который переводит JSP в Java, инициирует генерацию документа и т.д. Существует несколько таких JSP-движков, но все они работают примерно одинаково и реализуют одну и ту же спецификацию. Однако, при переносе документа между серверами могут понадобиться небольшие изменения в коде.
В обобщенном виде процесс обработки веб-сервером JSP-файла выглядит следующим образом.
- Браузер пользователя посылает на веб-сервер HTTP-запрос, как в случае обычной HTML-страницы.
- Сервер распознает, что запрос относится к JSP-странице, и отправляет его в JSP-движок (контейнер).
- Контейнер, в свою очередь, загружает JSP-файл с диска сервера и превращает его в содержимое сервлета. Это простой процесс, в котором текстовая часть шаблона преобразуется в операторы println (), а JSP-компоненты становятся Java-кодом, который отвечает за динамическую реакцию страницы.
- Далее JSP-движок компилирует сервлет в исполняемый класс и направляет пользовательский запрос уже в механизм сервлета, который загружает класс Servlet и исполняет его. В ходе этого сервлет выводит код страницы в формате HTML и перенаправляет его на веб-сервер.
- Получив ответ от сервлета, сервер направляет HTTP-ответ браузеру пользователя как статический HTML-объект.
- На конечном этапе браузер принимает ответ сервера и внутри него обрабатывает динамически генерируемую HTML-страницу аналогично обычному статическому веб-документу.
Жизненный цикл JSP-страницы включает несколько этапов.
- Перевод (трансляция). На этом этапе жизненного цикла JSP-контейнер переводит JSP-код документа в код Java. Этот процесс происходит автоматически на стороне сервера, который проверяет достоверность страницы и создает для нее сервлет — программный модуль, отвечающий за обработку запроса пользователя.
- Компиляция. Далее JSP-контейнер компилирует Java-код, то есть переводит его на бинарный машинный язык. Перед этим он проверяет необходимость выполнения процесса — она возникает, если страница до этого не компилировалась или была изменена с момента последней компиляции. Сама компиляция осуществляется в три этапа – сначала JSP-контейнер разбирает JSP-код страницы, затем превращает его в сервлет, а потом компилирует его.
- Загрузка и инициализация. JSP-контейнер загружает предварительно сгенерированный сервлет и создает экземпляр соответствующего класса. Затем он инициализирует экземпляр объекта, вызывая метод jspinit () перед обслуживанием запросов. Инициализация выполняется в большинстве случаев только один раз.
- Выполнение. После всех подготовительных этапов JSP-движок начинает обработку запросов. Это осуществляется через сервлет, который вызывает метод _jspService() с двумя параметрами — на поступающие (запрошенные) и отправляемые данные. Для каждого запроса этот метод вызывается только один раз.
- Очистка. Этот этап — логическое завершение жизненного цикла JSP. Как только запрос обработан, JSP-контейнер удаляет JSP-код и готовится повторить цикл снова для следующего запроса.
Структура JSP-страницы
Чтобы JSP-страница нормально работала, у нее должна быть соответствующая структура, включающая как стандартный текст, написанный на одном из языков разметки (HTML, XML и т.д.), так и интегрированные Java-компоненты. Интеграция последних осуществляется с помощью следующих инструментов:
- специальных JSP-тегов <% и %>, которыми в общем HTML-коде обозначаются начало и конец кода, написанный на Java;
- выражений скриптового языка Expression Language, которые позволяют веб-дизайнерам, не знающим сам язык Java, записывать его код непосредственно на странице и обеспечивать таким образом доступ к Java-компонентам.
Рассмотрим простой пример структуры JSP-страницы:
В этом примере видна как стандартная часть документа, обозначенная HTML-тегами, так и JSP-фрагменты, выделенные тегами <% и %>.
- Фрагмент <% String header = «Apache Tomcat»; %> задает переменную типа String под названием header.
- Фрагмент <h2><%= header %></h2> задает конкретное значение переменной, определенной выше.
- Фрагмент <p>Today <%= new java.util.Date() %></p> просто показывает текущую дату.
Загрузим этот файл на сервер, поместив в JSP-контейнер Tomcat. Запустив его и обратившись к приложению через адресную строку браузера, получим следующий результат:
Чтобы начать программировать веб-приложения с помощью JSP, необходимы:
- cреда разработки. Это специальное программное обеспечение, в котором осуществляется создание, тестирование и отладка JSP-документов. Наиболее распространенные среды разработки для работы с Java-компонентами — NetBeans, Eclipse или Java Development Kit. Их необходимо предварительно скачать и установить на компьютер;
- JSP-контейнер. Этот компонент представляет собой сервер, отвечающий за системную поддержку сервлетов и обеспечивающий их жизненный цикл на основе правил, утвержденных в спецификациях. JSP-контейнер способен выполнять функции полноценного веб-сервера, поставлять веб-страницы для другого сервера или встраиваться в сервер приложений Java EE. Одним из самых популярных контейнеров для JSP является Apache Tomcat.
Помимо этого, чтобы разрабатывать веб-страницы на JSP, нужно установить соответствующую библиотеку и сам Java на ПК.
Структура JSP
Технология JSP использует несколько ключевых компонента для написания кода динамических страниц.
- Директивы (directive). Это сообщения для JSP-движка, определяющие, какие действия и в каком порядке он должен выполнить. Например, с их помощью можно задать характеристики страницы, подключить дополнительные ресурсы, использовать нестандартные библиотеки тегов.
- Действия (actions). Этот компонент инкапсулирует функции в тегах, которые встраиваются в код в JSP-страницы. Действия часто исполняются с учетом данных, отправляемых на сервер в запросе от конкретного пользователя. С их помощью также можно создавать Java-объекты, которые используются в скриптлетах JSP.
- Скриптлеты (scriptlets). Они применяются для вставки Java-кода в страницы JSP, взаимодействующего с объектами страницы в процессе обработки запроса.
- Библиотеки тегов (tag library). Этот компонент позволяет расширить функционал страницы за счет создания и использование собственных тегов.
- Объявления (declaration). Они задают переменные, методы, внутренние классы и другие характеристики, которые можно позже применить в коде Java в документе JSP.
Преимущества JSP
Широкому распространению JSP способствует ряд преимуществ технологии перед альтернативными методами создания динамических страниц.
В сравнении с ASP. Технология активных серверных страниц была предложена в 1997 году компанией Microsoft специально для собственных серверных ОС Windows. На других операционных системах ее использование либо затруднено, либо невозможно. JSP использует Java как язык разработки динамических элементов, что, с одной стороны, упрощает работу, с другой — обеспечивает кроссплатформенность и переносимость веб-приложений на серверы других производителей.
В сравнении с «чистыми» сервлетами. JSP тоже использует сервлеты в процессе генерации динамических страниц. Однако, для работы сервлетов в чистом виде, HTML-текст страницы должен быть преобразован с помощью операторов println, писать и редактировать которые менее удобно, чем документ, записанный с помощью стандартного языка разметки.
В сравнении с SSI (включением на стиороне сервера). SSI — это реализованный в веб-сервере Apache язык для динамической сборки веб-страниц из отдельных модулей с последующей выдачей пользователю в виде HTML-документа. На практике он не позволяет создавать действительно сложные веб-приложения с использованием онлайн-форм, подключением к базам данных, взаимодействием с другими страницами и т.д. JSP же за счет своей многофункциональности позволяет реализовать если не все, то большинство возможностей, ожидаемых от современных веб-приложений.
В сравнении с JavaScript. Скриптовый язык программирования JavaScript реализует динамические сценарии на стороне клиента (браузера). Как и в случае с SSI, это позволяет реализовать ограниченный набор возможностей. JSP работает на стороне сервера и задействует более широкий функционал, что позволяет использовать его при разработке крупных и сложных проектов.
Отдельно стоит сравнить JSP и другую распространенную в прошлом технологию создания динамических сайтов под названием Common Gateway Interface (Общий интерфейс шлюза). Она работает следующим образом:
- веб-сервер, получая запрос от клиентского браузера, преобразует его в CGI-форму;
- затем сервер вызывает обработчик и конвертирует его ответ из CGI-формы в форму HTTP-ответа клиенту.
Несмотря на то, что схема работы CGI выглядит проще, на практике у JSP есть немало преимуществ перед этой устаревшей технологией.
- В CGI для динамических компонентов страниц необходимо создавать отдельные файлы. Такой способ замедляет генерацию содержимого страницы. В JSP динамические компоненты можно встраивать непосредственно в HTML-код, что существенно упрощает разработку и увеличивает скорость загрузки страницы.
- JSP обязательно компилируется сервером перед обработкой, за исключением случаев, когда компиляция уже была осуществлена, а документ с тех пор не менялся. CGI же требует при запросе страницы всегда требует загрузки интерпретатора и целевого скрипта.
- Страницы JavaServer надстраиваются над API сервлетов Java, поэтому JSP доступны все мощные API-интерфейсы Enterprise Java, в том числе JDBC, JNDI, EJB, JAXP и другие.
- JSP-технологию можно комбинировать с «чистыми» сервлетами, обрабатывающими бизнес-логику, модель, которую поддерживают механизмы шаблонов сервлетов Java.
Недостатки JSP
К наиболее заметным недостаткам JSP-технологии относятся следующие.
- Необходимость знать Java. Изначально технология JSP позиционировалась как средство, разграничивающее код и представление, то есть отделяющее работу дизайнера и программиста. На практике дизайнер зачастую должен владеть хотя бы азами программирования на Java, чтобы спроектировать нормально работающую JSP-страницу.
- Использование одного языка. JSP работает только в связке с языком Java. С одной стороны, это ограничивает возможности разработчика, заставляя его переучиваться на этот язык. С другой, на практике Java является одним из наиболее популярных ЯП, поэтому это не вызывает больших проблем.
Заключение
Изначально JSP была создана как ответ на коммерчески успешную ASP, разработанную компанией Microsoft, с которой корпорация Sun Microsystems конкурировала в конце 90-х годов прошлого века. Однако, со временем эта технология претерпела ряд важных изменений и превратилась в самодостаточный инструмент, который сегодня используется при разработке множества веб-приложений.
JSP особенно удобно использовать в крупных проектах. Одна из основных проблем при разработке сложных веб-приложений заключается в необходимости анализировать большие массивы кода. Если в проекте модель, ответственная за работу непосредственно с данными, не отделена от представления (пользовательского интерфейса), это может создавать сложности для разработчиков и существенно замедлить разработку и поддержку продукта.
JSP-технология основана на четком разделении модели (бизнес-логики) и представления (пользовательского интерфейса). Это позволяет реализовывать большие и сложные веб-сайты и приложения путем разделения обязанностей между программистами и дизайнерами. Кроме того, технология упрощает поддержку таких проектов, так как с ее помощью можно редактировать бизнес-логику, не затрагивая пользовательскую часть, и наоборот. Вместе с тем JSP успешно показывает себя и в создании небольших веб-приложений за счет гибкого подхода к проектированию.
0 комментариев