Запросы портлетов, ответы и сессии


API портлетов особо заботятся о том, чтобы разделить обработку запросов и исполнение ответов. Это разделение критически важно. Поскольку порталы объединяют фрагменты из множественных портлетов, каждый запрос портала потребует, чтобы эти портлеты, не заданные в действии, были переинтерпретированы. Если обработка и интерпретирование портлета объединены, это переинтерпретирование потребует повторной обработки. Это может привести к чему угодно – от дублирования данных до ненужного исполнения логики обработки.


Интерфейсы ActionRequest и ActionResponse используются портлетом для обработки действий – типичных подач форм. ActionRequest дает возможность работать с двоичными данными, отправленными клиентом. ActionResponse позволяет портлеты отвечать и манипулировать запросом , устанавливая PortletMode (рассмотрено ниже), WindowState (рассмотрено ниже) и параметрами интерпретации. Разработчики портлетов также могут перенаправлять запрос через ActionResponse.



RenderRequest используется, чтобы сообщить портлету параметры интерпретации. RenderRequest не имеет доступа к оригинальным параметрам, отправленным ActionRequest клиентом. Вместо этого, параметры интерпретации используются для пересылки информации из фазы действия в фазу интерпретирования. Интерфейс RenderResponse предоставеляет портлету механизм сообщения между сгенерированным контентом и клиентом (часто посредством портала).



PortletSession iдоступна через любой из PortletRequest. PortletSession содежит две разные области действия – область действия приложения и область действия портлета. Атрибуты области действия приложения доступны абсолютно всем веб-ресурсам в рамках применения портлета. Атрибуты, находящиеся на портлетном уровне должны быть доступными только на начальном этапе, котрый добавляет их в сессию. Portlet Specification не препятствует атрибутам области действия портлета в доступности для глобальных ресурсов. Вместо этого спецификация определяет, что 'Атрибуты, хранящиеся в (области действи япортлета) незащищены от прочих веб-компонентов портлетного приложения. Они просто соответственно разделены в пространстве имен'.


Внимание: Java Servlet Specification требует, чтобы два контекста никогда не разделяли один и тот же экземпляр сессии (session instance). По этой причине невозможно разделить информацию сессии для использования двумя портлетными приложениями (или портлетным приложением и порталом).