Меня просят поработать над портлетами и порталами.
Я хочу узнать разницу между портлетом и сервлетом?
Чем и чем портлет отличается (может быть функционально) от сервлета?
Ответы:
Портлеты являются частью стандарта JSR-168, который регулирует контейнеры и компоненты портала. Этот стандарт отличается от стандартов для веб-контейнеров (и сервлетов). Хотя между этими двумя стандартами определенно существуют сильные параллели, они различаются по контейнерам, API, жизненному циклу, конфигурации, развертыванию и т. Д.
Основное различие между портлетом и сервлетом может заключаться в том, что, хотя сервлет всегда отвечает на один тип действия - запрос , портлет (из-за характера его жизненного цикла и более сильных привязок контейнеров) должен реагировать на два типа действий: визуализацию и запрос . Конечно, это еще не все, но я обнаружил в этом основное различие между ними, когда изучал разработку порталов.
Улучшено из источника : сервлеты против портлетов
Сходства
Сервлеты и портлеты - это веб-компоненты, которые используют Java для своей реализации.
Портлеты управляются контейнером портлетов точно так же, как сервлет управляется контейнером сервлетов.
Как статическое, так и динамическое содержимое может создаваться портлетами и сервлетами.
Жизненный цикл портлетов и сервлетов контролируется контейнером.
Модель клиент / сервер используется как для сервлетов, так и для портлетов.
Упаковка и развертывание по существу одинаковы, WAR / EAR.
Сеанс приложения существует как в контейнерах сервлетов, так и в контейнерах портлетов. Это один из способов совместного использования данных (грубая связь между портлетами) от этапа визуализации до этапа действия (или любых более низких этапов) в контейнерах портлетов.
И сервлеты, и портлеты используют схожие среды серверов / виртуальных машин, которые их поддерживают. Тем не менее, в случае портлетов могут потребоваться некоторые дополнительные настройки, чтобы включить его
Инструменты сборки / DI одинаковы для обоих - поддерживаются Ant, Maven, Gradle и т. Д. В основном :) - Это немного изменилось с Liferay 7.
Несходства
Сервлеты могут отображать целые веб-страницы, тогда как портлеты отображают фрагменты HTML. Эти фрагменты объединяются порталом в целую веб-страницу.
Тип содержимого портлетов JSR 168 может быть только cHTML, XHTML, WML. Он не поддерживает другие типы контента.
Портлетам не разрешается создавать HTML-код, содержащий такие теги, как body, frame, frameset, head, html или title.
Портлет, в отличие от сервлета, не имеет привязанного к нему URL, поэтому к нему нельзя получить прямой доступ. Доступ осуществляется только через страницу портала, на которой находится портлет.
Портлеты могут быть снабжены элементами управления для управления состояниями окон или режимами портлетов.
На одной странице можно разместить несколько экземпляров одного портлета.
Портлеты поддерживают постоянную конфигурацию и настройку, информацию профиля.
Портлеты могут иметь два типа запросов, а именно. запрос на рендеринг и запрос действия.
Портлеты имеют две области в сеансе; область приложения для связи между портлетами и область действия портлета для связи внутри портлета.
Портлет не может установить кодировку набора символов для ответа и не может установить заголовки ответа HTTP.
Портлеты не имеют доступа к URL-адресу запроса. Таким образом, он не может получить доступ к параметрам запроса, добавленным к URL-адресу. Портлеты не могут устанавливать файлы cookie.
Типичные методы Portlet API являются
doView()
,doEdit()
,doHelp()
и вprocessAction()
то время как сервлет являетсяservice()
,doPost()
,doGet()
.Спецификации сервлетов - JSR 369 (сервлет 4.0), JSR 340 (сервлет 3.1), JSR 315 (сервлет 3.0), JSR 154 (сервлет 2.5 и 2.4). Технические характеристики портлета - JSR 168 (спецификация портлета, версия 1.0), JSR 286 (спецификация портлета, версия 2.0), JSR 362 (спецификация портлета, версия 3.0)
Развертывание портлетов предполагает иной подход, чем приложение сервлетов. Некоторые провайдеры (Liferay / Alfresco / WebSphere) поддерживают горячее развертывание портлетов без необходимости перезапуска сервера, что невозможно в случае сервлетов без модульного построения приложения с использованием специальных библиотек, таких как OSGi.
Изменить (из комментариев)
Контейнер портлетов построен на контейнере сервлетов. Таким образом, в конечном итоге можно сказать, что портлет работает в контейнере сервлетов. Но при разработке приложений мы рассматриваем контейнер портлета отдельно от контейнера Servlet / Java EE.
И портлеты, и сервлеты получают HTTP-запрос и возвращают ответ, который обычно представляет собой некоторый HTML-код, который может отображаться браузером. Портлет используется в контексте «портала», идея состоит в том, что одна страница, которую видит пользователь, состоит из множества частей, мозаичных плиток, каждая из которых поступает из отдельного портлета.
Теперь вы можете получить этот "мозаичный" эффект от обычных серветов (см. Struts + Tiles, чтобы узнать, как) дополнительный бит от портлетов заключается в том, что портлеты находятся в более богатой среде, предоставляемой порталом, предоставляются дополнительные API-интерфейсы, чтобы то, что отображается любым портлетом, может быть настроено отдельными пользователями в соответствии с их предпочтениями, а портлеты могут взаимодействовать друг с другом - нажмите кнопку в одном портлете, что-то произойдет в другом.
Сервлеты имеют определение java (приложения, которые обрабатывают запросы HTTP GET / POST), а портлеты имеют определение пользовательского интерфейса. Компонент, выполняющий определенную функцию, подобную виджетам Windows Vista или множеству компонентов, используемых здесь в stackoverflow. Они не обязательно должны поддерживаться сервлетами на стороне сервера. Но стандарт Portlet был разработан вместе с java. У О'Рейли есть хороший учебник .
По сути, сервлеты предоставляют контент, который обычно занимает всю страницу в браузере (если вы не используете фреймы), а портлеты предоставляют контент, который заключен в окно. С помощью портлетов у вас может быть несколько портлетов рядом друг с другом, и каждый из них может предоставлять контент и функции, отличные от других. Портлет может обеспечивать полное взаимодействие для одного типа приложения, а другой портлет может предоставлять контент для другого типа приложения. Портал может предоставлять некоторые служебные функции и защищенную единую точку входа для всех портлетов на странице. Что касается деталей (сходства / различия) между ними, продолжайте читать. Вот некоторые сходства: