В чем разница между JSF, Servlet и JSP?

826

У меня есть несколько вопросов. Эти :

  1. Как JSP и Servlet связаны друг с другом?
  2. JSP - это своего рода сервлет?
  3. Как JSP и JSF связаны друг с другом?
  4. Является ли JSF своего рода JSP на основе Pre-Buil UI, как ASP.NET-MVC?
Cheung
источник
3
В JSF 2.0+ xml не требуется.
Дивьеш Канзария

Ответы:

1229

JSP (JavaServer Pages)

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

Когда JSP запрашивается в первый раз или когда веб-приложение запускается, контейнер сервлета скомпилирует его в расширяемый класс HttpServletи будет использовать его в течение срока службы веб-приложения. Вы можете найти сгенерированный исходный код в рабочем каталоге сервера. Например, Tomcat , это /workкаталог. По запросу JSP контейнер сервлета выполнит скомпилированный класс JSP и отправит сгенерированный вывод (обычно просто HTML / CSS / JS) через веб-сервер по сети на сторону клиента, которая, в свою очередь, отобразит его в веб-браузере.

сервлеты

Сервлет - это интерфейс прикладного программирования (API) Java, работающий на сервере, который перехватывает запросы, сделанные клиентом, и генерирует / отправляет ответ. Хорошо известным примером является метод, HttpServletкоторый предоставляет методы для перехвата HTTP- запросов с использованием популярных методов HTTP, таких как GETи POST. Вы можете настроить HttpServletс , чтобы слушать определенный шаблон HTTP URL, который можно настроить в web.xml, или совсем недавно с Java EE 6 , с @WebServletаннотацией.

Когда сервлет запрашивается впервые или во время запуска веб-приложения, контейнер сервлета создаст его экземпляр и сохранит его в памяти в течение срока службы веб-приложения. Один и тот же экземпляр будет повторно использоваться для каждого входящего запроса, URL-адрес которого соответствует шаблону URL-адреса сервлета. Вы можете получить доступ к данным запроса HttpServletRequestи обработать ответ HttpServletResponse. Оба объекта доступны в качестве аргументов метода внутри любого из переопределенных методов HttpServlet, таких как doGet()и doPost().

JSF (JavaServer Faces)

JSF - это основанная на компонентах инфраструктура MVC, которая построена поверх API сервлета и предоставляет компоненты через библиотеки тегов, которые можно использовать в JSP или любой другой технологии представления на основе Java, такой как Facelets . Facelets гораздо больше подходит для JSF, чем JSP. Он, в частности, предоставляет отличные возможности создания шаблонов, такие как составные компоненты , в то время как JSP в основном предлагает только <jsp:include>шаблоны для JSF, так что вы вынуждены создавать пользовательские компоненты с необработанным Java-кодом (что немного непрозрачно и требует много работы) Вы хотите заменить повторяющуюся группу компонентов одним компонентом. Начиная с JSF 2.0, JSP устарела как технология просмотра в пользу Facelets.

Примечание : сама JSP НЕ устарела, только комбинация JSF с JSP устарела.

Примечание : JSP обладает большими возможностями шаблонизации с помощью Taglibs, особенно вариант ( Tag File ). JSP шаблонов в сочетании с JSF - это то, чего не хватает.

Будучи инфраструктурой MVC ( Model-View-Controller ), JSF предоставляет в FacesServletкачестве единственного контроллера запрос-ответ . Он берет на себя всю стандартную и утомительную работу по запросам / ответам HTTP, такую ​​как сбор пользовательского ввода, проверка / преобразование его, помещение их в объекты модели, вызов действий и рендеринг ответа. Таким образом, вы в конечном итоге получите страницу JSP или Facelets (XHTML) для View и класс JavaBean как Model . Компоненты JSF используются для связывания представления с моделью (как это делает ваш веб-элемент управления ASP.NET), а для выполнения всей работы FacesServletиспользуется дерево компонентов JSF .

Смежные вопросы

BalusC
источник
8
@ Шашанк: не совсем. Только <c:forEach>тег от JSTL. См. Также stackoverflow.com/tags/jstl/info
BalusC
1
Да. <mytag:doesSomething/>выглядит как пользовательский тег и <jsp:attribute>тег JSP.
Шашанк Кадне
3
Поскольку это очень популярный ответ, я хочу добавить очень важный бит - файлы тегов JSP, которые позволяют создавать собственные теги для компоновки страницы и макета без написания кода Java. Эта функция чрезвычайно полезна и уже много лет является частью стандарта, но до сих пор используется недостаточно.
Джигги
1
@johnny Facelets была предпочтительной технологией просмотра с момента выхода Java EE 6 в 2009 году ( docs.oracle.com/javaee/6/tutorial/doc/giepx.html ). Минимальный набор технологий для разработки веб-приложений на Java не выше, чем у большинства других языков, но есть гораздо больше вариантов и конкурентов, что вводит в заблуждение новичков. Веб-разработка в Ruby? Первый выбор очевиден.
DavidS
1
@BalusC +1 для подробного объяснения. Мой любимый ответ
Аниш Б.
84

См. Http://www.oracle.com/technetwork/java/faq-137059.html.

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

Смотрите https://jcp.org/en/introduction/faq

A: Технология JavaServer Faces является основой для создания пользовательских интерфейсов для веб-приложений. Технология JavaServer Faces включает в себя:

Набор API для: представления компонентов пользовательского интерфейса и управления их состоянием, обработки событий и проверки ввода, определения навигации по страницам и поддержки интернационализации и доступности.

Библиотека пользовательских тегов JavaServer Pages (JSP) для выражения интерфейса JavaServer Faces на странице JSP.

JSP - это специализированный вид сервлетов.

JSF - это набор тегов, которые вы можете использовать с JSP.

С. Лотт
источник
6
«JSP - это специализированный вид сервлетов. JSF - это набор тегов, которые вы можете использовать с JSP». Это утверждение лучше всего описывает отношения между тремя!
lfree
34

С точки зрения браузера / клиента

JSP и JSF выглядят одинаково. Согласно требованиям приложения, JSP больше подходит для приложений, основанных на запросах и ответах.

JSF предназначен для более богатых событийных веб-приложений. Я вижу событие более гранулированным, чем запрос / ответ.

С точки зрения сервера

Страница JSP преобразуется в сервлет и имеет минимальное поведение.

Страница JSF преобразуется в дерево компонентов (с помощью специализированного FacesServlet) и следует жизненному циклу компонента, определенному спецификацией.

Vh24
источник
23

Сервлеты:

Java Servlet API позволяет разработчикам Java писать код на стороне сервера для доставки динамического веб-контента. Как и другие проприетарные API веб-сервера, API сервлетов Java предлагал улучшенную производительность по сравнению с CGI; однако у него есть некоторые дополнительные ключевые преимущества. Поскольку сервлеты были написаны на Java, они предоставляют подход объектно-ориентированного проектирования и, что более важно, способны работать на любой платформе. Таким образом, один и тот же код был переносим на любой хост, поддерживающий Java. Сервлеты внесли большой вклад в популярность Java, поскольку он стал широко используемой технологией для разработки веб-приложений на стороне сервера.

JSP:

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

JSF:

JavaServer Faces - это стандартная среда Java для создания пользовательских интерфейсов для веб-приложений. Самое главное, это упрощает разработку пользовательского интерфейса, который часто является одной из наиболее сложных и утомительных частей разработки веб-приложений.
Хотя можно создавать пользовательские интерфейсы с использованием основополагающих веб-технологий Java (таких как сервлеты Java и страницы JavaServer) без всеобъемлющей инфраструктуры, разработанной для разработки веб-приложений предприятия, эти базовые технологии часто могут приводить к различным проблемам разработки и обслуживания. Что еще более важно, к тому времени, когда разработчики достигнут решения для обеспечения качества производства, тот же набор проблем, решаемых JSF, будет решаться нестандартным образом. JavaServer Faces предназначен для упрощения разработки пользовательских интерфейсов для веб-приложений Java следующими способами:
• Он обеспечивает компонентно-ориентированный, независимый от клиента подход к разработке веб-пользовательских интерфейсов, что повышает производительность труда разработчиков и упрощает использование.
• Упрощает доступ к данным приложения и управление ими из веб-интерфейса пользователя.
• Он автоматически управляет состоянием пользовательского интерфейса между несколькими запросами и несколькими клиентами простым и ненавязчивым образом.
• Он предоставляет среду разработки, которая удобна для разнообразной аудитории разработчиков с различными наборами навыков.
• Описывает стандартный набор архитектурных шаблонов для веб-приложения.

[ Источник: Полная ссылка: JSF ]

Кишор Пракаш
источник
3
Это был не я, но я думаю, это потому, что вы просто скопировали и вставили ответ из книги.
Мауберн
7
@ Оберон: Спасибо за ответ. Мне потребовалось некоторое время, чтобы найти точные слова, поэтому пошли за книгой. Если это не уместно, то вы или кто-либо другой может предложить мне снять ответ. Я буду рад сделать это.
Кишор Пракаш
18

Есть также ситуации, когда вы можете отдать предпочтение JSP над JSF. Характер приложения должен быть решающим фактором при выборе технологии.

Если у вас богатое взаимодействие с графическим интерфейсом и требуется много сценариев Java, предпочтите JSF. По сути, если ваша архитектура приложений с графическим интерфейсом похожа на компоненты и даже управляется как Swing, то JSF является лучшим.

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

Karthi
источник
13

Сервлет - это серверный слой Java.

  • JSP - это сервлет с html
  • JSF - это компоненты, основанные на библиотеках тегов
  • JSP - он конвертируется в сервлет один раз, когда сервер получил запрос.
кудахтать
источник
2
JSP преобразуется в сервлет один раз, когда сервер получил запрос.
болтать
... когда сервер получил первый запрос. Кэширование разума.
дбалакирев
10

это правда, что JSP преобразуется в сервлет во время выполнения, и JSF - совершенно новая вещь для того, чтобы сделать веб-страницу более читабельной, так как JSF позволяет записывать все программные структуры в форме тега.

Махеш
источник
6

Основное различие между сервлетами и JSP заключается в том, что в сервлетах мы пишем код Java и в том, что мы встраиваем код HTML, а с JSP есть только обратный случай. В JSP мы пишем HTML-код и встраиваем Java-код, используя теги, предоставленные JSP.

user3608245
источник
5

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

Facelets - это первый не-JSP язык объявления страниц, разработанный для JSF (Java Server Faces), который предоставил разработчикам JSF более простую и мощную модель программирования по сравнению с JSP. Это решает различные проблемы, возникающие в JSP для разработки веб-приложений.

Вот таблица, которая сравнивает особенности скриптов и лицевых граней:

введите описание изображения здесь Источник

Yster
источник
0
JSP:means HTML+Java Code:

JSP имеет свой собственный жизненный цикл jsp_init () jsp_service () jsp_destroy

После первого запроса JSP конвертируется в файл .java. Существует три типа тегов, которые мы используем
1.) Без скриптов

<%  %>

Здесь разработчик может объявить все те вещи, которые разработчик хочет взять данные

2.) Выражение тега

<%=  %>

Здесь разработчик может использовать некоторые данные, связанные с печатью

3.) Декларация

<!% %>

Здесь разработчик может объявить некоторые данные, связанные с методом.

Servlet:

У сервлета свой жизненный цикл.

init()
service()
destroy()

После первого запроса контейнер будет считывать данные из файла web.xml, после чего будет отображаться приветствие.
Теперь после выполнения действия он будет искать URL-адрес, а после этого процесса он будет искать конкретный сервлет там, где он сам. Сервисная операция выполнит.

JSF:

У JSF есть собственный пользовательский интерфейс, и его жизненный цикл может работать шестью способами,

A)Restore view phase
B)Apply request values phase
C)Process validations phase
D)Update model values phase
E)Invoke application phase
F)Render response phase

Для интерфейса здесь для таблицы здесь мы используем сетку панели, и для этого есть разные грани.

Rich Faces
Prime Faces.
Анкит
источник
-1

JSP являются компонентом View MVC (Model View Controller). Контроллер принимает входящий запрос и передает его в модель, которая может быть компонентом, обеспечивающим некоторый доступ к базе данных. Затем JSP форматирует вывод, используя HTML, CSS и JavaScript, и затем вывод отправляется обратно запрашивающей стороне.

metrangia
источник
-1

JSF - это усовершенствованная инфраструктура, в которой очень легко реализовать архитектуру на основе Model-View-Controller (MVC) для проектов. Основным преимуществом JSF над JSP является простота динамического рендеринга компонентов в браузере в зависимости от условий и простота интеграции событий ajax.

Внешний интерфейс приложения JSF, т. Е. Файлы xhtml, - это файлы, которые отображаются пользователю через браузер. Эти файлы xhtml внутренне вызывают управляемые bean-компоненты, например, контроллеры, в которых записана реальная логика приложения.

Контроллеры внутренне вызывают различные сервисы, которые взаимодействуют с базой данных (используя Hibernate или JPA API). Вот как поток происходит вкратце.

JSF также используется в сочетании с RichFaces, который является основой для придания вашему веб-приложению богатого внешнего вида.

JSF + RichFaces + Hibernate / JPA - это хорошая технология для изучения!

Нихилу
источник
-2

Jsp также имеет встроенный код сервлета, который не требует какой-либо внешней компиляции, он может быть запущен напрямую. Изменения вступят в силу в JSP непосредственно в браузере.

Сервлет должен быть скомпилирован (т.е. он будет иметь конкретное создание класса)

Jsf является компонентом представления MVC Framework

Махендер Редди Яса
источник
-2

JSP означает JAVA SERVER PAGE ........ JSP не является сервлетом. Jsp использует код и HTML-теги сами по себе, вам не нужно создавать HTML и сервлет отдельно. Jsp играют великолепную роль в веб-приложении. Servlet - это класс java, который играет роль в превращении вашей HTML-страницы из статической в ​​динамическую.

Рупам
источник
2
JSP действительно преобразуются в компоненты Servlet. Msgstr "JSP переводятся в сервлеты во время выполнения". Источник: en.wikipedia.org/wiki/JavaServer_Pages
dbalakirev
-2

Сервлеты - это серверные Java-программы, которые выполняются внутри веб-контейнера. Основной целью сервлета является обработка запросов, полученных от клиента.

Java Server Pages используется для создания динамических веб-страниц. Jsp были введены для написания кода Java плюс HTML в одном файле, что было нелегко сделать в программе сервлетов. И файл jsp преобразуется в сервлет Java, когда он переведен.

Java Server Faces - это веб-инфраструктура MVC, которая упрощает разработку пользовательского интерфейса.

Хетал Рах
источник