1. Введение
При разработке любого приложения важную роль играет выбор правильной технологии. Однако решение не всегда бывает однозначным.
В этой статье мы предоставим сравнительный обзор трех популярных технологий Java. Прежде чем перейти к сравнению, мы начнем с изучения назначения каждой технологии и ее жизненного цикла. Затем мы посмотрим, каковы их характерные черты, и сравним их по нескольким характеристикам.
2. ДжСФ
Jakarta Server Faces, ранее известная как JavaServer Faces , представляет собой веб-фреймворк для создания пользовательских интерфейсов на основе компонентов для приложений Java. Как и многие другие, он также следует подходу MVC . «Вид» MVC упрощает создание пользовательских интерфейсов с помощью повторно используемых компонентов пользовательского интерфейса.
JSF имеет широкий спектр стандартных компонентов пользовательского интерфейса, а также обеспечивает гибкость для определения нового через внешний API.
Жизненный цикл любого приложения включает в себя различные этапы от его инициации до завершения. Точно так же жизненный цикл приложения JSF начинается, когда клиент делает HTTP-запрос, и заканчивается, когда сервер отвечает ответом. Жизненный цикл JSF представляет собой жизненный цикл запрос-ответ и обрабатывает два типа запросов: первоначальные запросы и обратную передачу.
Жизненный цикл приложения JSF состоит из двух основных фаз: выполнение
и рендеринг
.
Фаза выполнения
далее делится на шесть фаз:
- Восстановить представление: запускается, когда JSF получает запрос.
- Apply Request Values: Восстановление дерева компонентов во время запроса обратной передачи
- Обработка валидации: обработка всех валидаторов, зарегистрированных в дереве компонентов.
- Обновить значения модели: просматривает дерево компонентов и устанавливает соответствующие свойства объекта на стороне сервера.
- Invoke Application: обрабатывает события на уровне приложения, такие как отправка формы.
- Render Response: строит представление и отображает страницы
На этапе рендеринга
система визуализирует запрошенный ресурс в ответ браузеру клиента.
JSF 2.0 был основным выпуском, который включал Facelets, составные компоненты, AJAX и библиотеки ресурсов.
До Facelets JSP был механизмом шаблонов по умолчанию для приложений JSF. В более старых версиях JSF 2.x появилось много новых функций, делающих платформу более надежной и эффективной. Эти функции включают, среди прочего, поддержку аннотаций, HTML5, Restful и JSF без сохранения состояния.
3. Сервлет
Сервлеты Jakarta, ранее известные как сервлеты Java , расширяют возможности сервера. Обычно сервлеты взаимодействуют с веб-клиентами, используя механизм запроса/ответа, реализованный контейнером.
Контейнер сервлетов является важной частью веб-сервера. Он управляет сервлетами и создает динамический контент в соответствии с запросами пользователей. Всякий раз, когда веб-сервер получает запрос, он направляет запрос зарегистрированному сервлету .
Жизненный цикл состоит всего из трех фаз. Сначала вызывается метод init() для запуска сервлета
.
Затем контейнер отправляет входящие запросы методу service()
, который выполняет все задачи. Наконец, метод destroy()
очищает некоторые вещи и разрывает сервлет.
Сервлеты имеют много важных функций, включая встроенную поддержку Java и ее библиотек, стандартный API для веб-серверов и возможности HTTP/2. Кроме того, они разрешают асинхронные запросы и создают отдельные потоки для каждого запроса.
4. JSP
Страницы сервера Jakarta, ранее известные как страницы JavaServer , позволяют нам вводить динамическое содержимое в статическую страницу. JSP представляют собой высокоуровневую абстракцию сервлетов, поскольку они преобразуются в сервлеты перед началом выполнения.
Общие задачи, такие как объявление переменных и вывод значений, создание циклов, условное форматирование и обработка исключений, выполняются с помощью библиотеки JSTL .
Жизненный цикл JSP подобен сервлету с одним дополнительным шагом — этапом компиляции. Когда браузер запрашивает страницу, механизм JSP сначала проверяет, нужно ли ему компилировать страницу или нет. Этап компиляции состоит из трех этапов.
Изначально движок анализирует страницу. Затем он преобразует страницу в сервлет. Наконец, сгенерированный сервлет компилируется в класс Java.
JSP имеют много примечательных функций, таких как отслеживание сеанса, элементы управления хорошей формой и отправка/получение данных на/с сервера. Поскольку JSP построен на основе сервлета, он имеет доступ ко всем важным API-интерфейсам Java, таким как JDBC, JNDI и EJB.
5. Ключевые отличия
Технология сервлетов является основой разработки веб-приложений в J2EE. Однако в нем нет технологии представления, и разработчику приходится смешивать теги разметки с кодом Java. Кроме того, в нем отсутствуют утилиты для обычных задач, таких как построение разметки, проверка запросов и включение функций безопасности.
JSP заполняют пробел в разметке сервлета. С помощью JSTL и EL мы можем определить любой пользовательский тег HTML для создания хорошего пользовательского интерфейса. К сожалению, JSP медленно компилируются, их трудно отлаживать, они оставляют базовую проверку формы и преобразование типов на усмотрение разработчика и не поддерживают безопасность.
JSF — это подходящая платформа, которая соединяет источник данных с многократно используемым компонентом пользовательского интерфейса, обеспечивает поддержку нескольких библиотек и упрощает создание приложений и управление ими. Будучи основанным на компонентах, JSF всегда имеет хорошее преимущество в безопасности по сравнению с JSP. Несмотря на все свои преимущества, JSF сложен и имеет крутую кривую обучения.
В свете шаблона проектирования MVC сервлет действует как контроллер, а JSP — как представление, тогда как JSF — это полноценный MVC.
Как мы уже знаем, сервлету потребуются ручные теги HTML в коде Java. С той же целью JSP использует HTML, а JSF использует Facelets. Кроме того, оба обеспечивают поддержку пользовательских тегов.
По умолчанию нет поддержки обработки ошибок в сервлете и JSP. Напротив, JSF предоставляет набор предопределенных валидаторов.
Безопасность всегда была проблемой в приложениях, которые передают данные через Интернет. В этом аспекте отсутствуют JSP, поддерживающие только аутентификацию на основе ролей и форм.
Говоря о протоколах, JSP принимает только HTTP, тогда как сервлет и JSF поддерживают несколько протоколов, включая HTTP/HTTPS, SMTP и SIP. Все эти технологии поддерживают многопоточность и требуют запуска веб-контейнера.
6. Заключение
В этом руководстве мы сравнили три популярные технологии в мире Java: JSF, Servlet и JSP. Во-первых, мы увидели, что представляет собой каждая технология и как развивается ее жизненный цикл. Затем мы обсудили основные особенности и ограничения каждой технологии. Наконец, мы сравнили их на основе нескольких признаков.
Какую технологию следует предпочесть другой, полностью зависит от контекста . Решающим фактором должен быть характер приложения.