Відповіді:
Портлети є частиною стандарту JSR-168, який регулює контейнери та компоненти порталу. Це відрізняється від стандартів для веб-контейнерів (і сервлетів). Хоча між цими двома стандартами напевно є сильні паралелі, вони відрізняються контейнерами, API, життєвим циклом, конфігурацією, розгортанням тощо.
Основна різниця між портлетом та сервлетом може полягати в тому, що хоча сервлет завжди відповідає на один тип дії - запит , портлет (через природу свого життєвого циклу та більш міцні прив’язки контейнерів) повинен відповідати на два типи дій: візуалізація та запит . Звичайно, в цьому є більше, але я визнав це основною різницею між ними, коли вивчав розробку порталу.
Покращено з джерела : Servlets Vs Portlets
Подібність
Сервлети та портлети - це веб-компоненти, які використовують Java для їх реалізації.
Портлетами керує контейнер портлетів так само, як сервлет керує контейнером сервлетів.
Як статичний, так і динамічний вміст може генеруватися портлетами та сервлетами.
Життєвий цикл портлетів і сервлетів контролюється контейнером
Модель клієнт / сервер використовується як для сервлетів, так і для портлетів
Упаковка та розгортання по суті однакові, WAR / EARs.
Сеанс програми існує як у контейнерах сервлету, так і в портлеті. Це один із способів обміну даними (необроблений зв’язок між портлетами) від фази візуалізації до фази дії (або будь-яких нижчих фаз) у контейнерах портлету.
І сервлети, і портлети використовують подібні середовища сервера / віртуальної машини, які його підтримують. Хоча деякі додаткові конфігурації можуть знадобитися для портлетів, щоб зробити його галочкою
Інструменти build / DI подібні для обох - підтримуються Ant, Maven, Gradle тощо. Переважно :) - Це трохи змінилося з Liferay 7.
Неподібність
Сервлети можуть відображати цілі веб-сторінки, тоді як портлети відображають HTML-фрагменти. Ці фрагменти порталом об’єднуються в цілу веб-сторінку.
Тип вмісту портлетів JSR 168 може бути лише cHTML, XHTML, WML. Він не підтримує інші типи вмісту.
Портлетам заборонено створювати HTML-код, який містить такі теги, як тіло, фрейм, набір фреймів, заголовок, html або заголовок.
Портлет, на відміну від сервлету, не має приєднаної 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 (Portlet Spec v1.0), JSR 286 (Portlet Spec v2.0), JSR 362 (Portlet Spec v3.0)
Розгортання портлетів передбачає інший підхід, ніж програма сервлетів. Деякі провайдери (Liferay / Alfresco / WebSphere) підтримують гаряче розгортання портлетів без необхідності перезапускати сервер, що неможливо у випадку сервлетів без модуляції програми за допомогою спеціальних бібліотек, таких як OSGi.
Редагувати (З коментарів)
Контейнер портлета побудований на контейнері сервлета. Тож зрештою можна сказати, що портлет працює на контейнері сервлетів. Але під час розробки програм ми переглядаємо контейнер портлетів окремо від контейнера Servlet / Java EE.
І портлети, і сервлети отримують http-запит і повертають відповідь, яка, як правило, є деяким HTML-кодом, який може бути наданий браузером. Портлет використовується в контексті "Порталу", ідея полягає в тому, що на одній сторінці, яку бачить користувач, є безліч частин, мислительних плиток, кожна з яких походить з іншого портлета.
Тепер ви можете отримати той ефект "плитки" від звичайних сервісів (див. Struts + Tiles для прикладу того, як). Додатковий біт від портлетів полягає в тому, що портлети знаходяться в багатшому середовищі, що надається Порталом, надаються додаткові API, щоб те, що відображається будь-яким портлетом, може бути налаштоване окремими користувачами на їх уподобання, а порти можуть спілкуватися один з одним - натискаючи кнопку в одному, щось відбувається в іншому.
Сервлети мають визначення Java (програми, які обробляють запити HTTP GET / POST), тоді як портлети мають визначення користувальницького інтерфейсу. Їх не обов'язково підтримувати сервлетами на стороні сервера. Але стандарт Portlet був розроблений поряд з java. У О'Рейлі є хороший підручник .
По суті, сервлети надають вміст, який зазвичай займає всю сторінку в браузері (якщо ви не використовуєте кадри), а портлети надають вміст, обгорнутий вікном. З портлетами ви можете мати кілька портлетів поруч один з одним, і кожен із них може надавати вміст та функціональність, що відрізняється від інших. Портлет може забезпечувати повну взаємодію для одного типу додатків, тоді як інший портлет може надавати вміст для іншого типу додатків. Портал може забезпечити деякий функціонал зберігання будинків та єдину захищену точку входу для всіх портлетів на сторінці. Щодо деталей (подібності / відмінності) між ними, будь ласка, продовжуйте читати. Ось кілька подібностей: