Смесь из wiki, http://cloud-cuckoo.com.ua/node/111, http://cloud-cuckoo.com.ua/node/114 и других источников.
Определения
Жизненный цикл
Каждый портлет имеет четыре метода, описывающих его жизненный цикл:
Обработка запросов
После того, как портлет был инициализирован, портлет контейнер может обратиться к портлету для обработки запроса.
Определения
Портал - веб-приложение, которое обычно обеспечивает персонализацию, аутентификацию, предоставляют различную информацию (возможно из разных источников) в едином виде (и на одной странице). Портал может быть персонализирован: отображать разную информацию (или отображать по-разному) в зависимости от пользователя. Страницы портала содержат набор портлетов.
Портлет - подключаемый, сменный компонент пользовательского интерфейса веб-портала. Благодаря существующим стандартам, разработчики могут создавать портлеты, встраиваемые в любой портал, следующий этим стандартам. Портлет управляется Портлет Контейнером: он обрабатывает запросы и генерирует динамический контент.
Портлет Контейнер выполняет портлеты, предоставляет им среду для выполнения, управляет жизненным циклом портлета, предоставляет хранилище для настроек портлета. Портлет Контейнер получает запросы от Портала на выполнение запроса конкретным Портлетом с портала.
Жизненный цикл
Каждый портлет имеет четыре метода, описывающих его жизненный цикл:
- init(PortletConfig config) - вызывается один раз, сразу после того, как создается объект нового портлета. Может быть использован для выполнения изначальных заданий. Этот метод сродни одноименному методу сервлета. PortletConfig представляет конфигурационные данные только для чтения, описанные в дескрипторе портлета (portlet.xml).
- processAction(ActionRequest request, ActionResponse response) - вызывается в ответ на различные действия пользователя, такие как клик по ссылке или отправка формы. В этом методе, портлет может вызывать компоненты бизнес логики, такие как JavaBeans. Интерфейсы ActionRequest и ActionResponse унаследованы от PortletRequest и PortletResponse. В методе processAction портлет может модифицировать свое собственное состояние также, как и информацию о портлете.
- render(RenderRequest request, RenderResponse response) - следует за processAction() в цепочке выполнения методов. Генерирует разметку, которая будет доступна пользователю портала.
- destroy() - последний метод в жизненном цикле портлета, вызываемый прямо перед вызовом сборщика мусора и обеспечивает последний шанс для освобождения ресурсов портлета.
После того, как портлет был инициализирован, портлет контейнер может обратиться к портлету для обработки запроса.
Предположим, у вас есть два портлета, названные A и B, на одной странице. Портлет A может получить запрос в двух случаях:
- Пользователь нажал на ссылку или отослал форму на портлете А. В таком случае, портлет А должен производить какие-то действия, как выполнение некоторой бизнес логики и генерации разметки. Это называется action processing, поскольку пользователь производит какое-то действие над портлетом А.
- Пользователь производит действие над портлетом В, и как результат, вся страница должна быть перегенерирована заново. Заметьте, что когда пользователь производит действия, браузер не только обновит контент портлета В, но запросит полную перерисовку страницы. В этом случае, портлет А не должен выполнять никакой бизнес логики, а вместо того он должен перегенерировать разметку. Эта процедура называется render phase.
Интерфейс портлета содержит два метода для обработки запросов:
- processAction(ActionRequest actionRequest, ActionResponse actionResponse): Контейнер портлета будет вызывать этот метод, когда какое-то действие будет произведено над портлетом. Оно передаст информацию, отосланную пользователем, такую как значения, введенные в форму, объект ActionRequest. Также можно использовать ActionResponse для редиректа пользователя на новую страницу.
- render(RenderRequest renderRequest, RenderResponse renderResponse): Этот метод аналогичный методу serivce() в Servlet API. Он вызывается в render phase, но его нельзя переопределить напрямую. Вместо этого, необходимо переопределить методы doView(), doHelp(), doEdit(). render() метод определит режим, запрашиваемый пользователем и вызовет нужный метод. Контейнер портлета передаст RenderRequest и RenderResponse в этот метод. Результат возвращаем как в сервлете: renderResponse.getWriter(). Но RenderRequest не берет значения из html напрямую. Вместо этого он идет в PortletSession: renderRequest.getPortletSession().getAttribute("username")
Взаимодействие между портлетами
Возможны 3 способа:
Возможны 3 способа:
- Данные можно хранить в сессии в application scope
- Используя public render параметры можно разделять render состояние между портлетами
- Портлеты умеют получать и посылать portlet events
Comments
Post a Comment