SlideShare a Scribd company logo
1 of 50
Портлет-контейнер JSR-168, JSR-286, WSRP Alexey Zavizionov
Servlet/JSP HTML страницы Интегрирование  веб-сервисов Эволюция сайтов. 1 3 2
Пользователю нужна иформация от  разных  источников. Представленная в едином  и  настраиваемом интерфейсе.
От  простого  сайта...
до  WebOS  портала.
...и разных  систем управления  сайтами*? СКОЛЬКО  ссылок   в интернете ...? *  CMS – content management system Многообразие.
Тысячи  разных CMS систем Один  триллион уникальных  ссылок в индексе Google* Десятки  Java порталов Результат эволюции. *  25.07.2008 1 3 2
Основная  проблема ? Выбираем портал.
1998 – 2002 У каждого портала  свой  API. Что же дальше?
JSR-168 JCP cтандарт  первой   портлетной спецификации. Jan. 2002 –  27 Oct. 2003
Expert group of JSR-168 * *  сокращенный список
Определения Портлет контейнер  - содержит  портлеты и управляет  их жизненным циклом Портлет  - приложение, которое предоставляет определенную  часть контента Портал  - веб приложение для  предоставления персонализации,  аутентификации и контент агрегации 1 3 2
Аутентификация Агрегация Персонализация Описание Portlet 1. 1 3 2 Кастомизация 4
Динамические ресурсы AJAX Взаимодействие портлетов Q: Что ещё не хватает? 1 2
JSR-286 JCP cтандарт  второй   портлетной спецификации. Nov. 2005 –  12 Jun. 2008
Expert group of JSR-286 * *  сокращенный список
События Взаимодействие портлетов * Публичные параметры Описание Portlet 2. 1 3 2 Сессии 4 Ресурсы 5 *  IPC - inter portlet communication Фильтры 6
eXo  Portlet Container
Концепция
Портлеты и сервлеты Отличия Сходства Экстра функциональность 1 3 2 P&S : Portlets and Servlets
P&S: Сходства Портлеты - java технология, базирующаяся на веб компонентах. Портлетами и их жизненным циклом управляет специальный контейнер. Портлеты производят динамический контент. Взаимодействуют с веб клиентами через парадигму запрос/ответ.
P&S: Отличия Только часть разметки. Вызываются через URLs сконструированные portlet API. Взаимодействие через портал. Обработка: action, event, render и resource. Предопределенные portlet mode и window state. Несколько на одной странице.
P&S:  Экстра функциональность Портлеты могут сохрнять persistent configuration. Портлеты имеют доступ к user profile. Могут сохранять временную информацию в двух областях видимости: application-wide scope и portlet private scope. Могут отправлять и получать события (events).
Архитектура
Архитектура
Конфигурация: portlet.xml Минимальная конфигурация портлетного приложения. <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> < portlet-app   xmlns=&quot; http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd  http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd&quot;  version=&quot;1.0&quot;> < portlet > < portlet-name >HelloWorldPortlet</portlet-name> < portlet-class > org.exoplatform.HelloWorldPortlet </portlet-class> < supports > < mime-type >text/html</mime-type> </supports> </portlet> </portlet-app>
Конфигурация: web.xml <listener> <listener-class> org.exoplatform.services.portletcontainer.impl.servlet. PortletApplicationListener </listener-class> </listener> <servlet> <servlet-name>PortletWrapper</servlet-name> <servlet-class> org.exoplatform.services.portletcontainer.impl.servlet . ServletWrapper </servlet-class> </servlet> <servlet-mapping> <servlet-name>PortletWrapper</servlet-name> <url-pattern> /PortletWrapper </url-pattern> </servlet-mapping>
Жизненный цикл processAction()‏ init()‏ processEvent() * 1 3 2 render()‏ 4 serveResource() * 5 destroy()‏ 6 *  в JSR-286
Портлет API PortletRequest GenericPortlet PortletResponse 1 3 2
API: GenericPortlet
API: PortletRequest
API: PortletResponse
Архитектура взаимодействия Event Action Resource 1 3 2
Process ACTION
Process EVENT
Serve RESOURCE
Попробуем в действии Event   пример. Action   пример. Render   пример.
Пример: Render public class HelloWorldPortlet extends GenericPortlet { public void  doView (RenderRequest renderRequest, RenderResponse renderResponse)‏ throws PortletException, IOException { renderResponse.setContentType(&quot;text/html; charset=UTF-8&quot;); PrintWriter w = renderResponse.getWriter(); w.println(&quot;Hello, World!&quot;); } }
Пример: Action public class HelloWorldPortlet extends GenericPortlet { public void  processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { actionRequest.setAttribute(&quot;test_attribute&quot;, &quot;test&quot;); actionResponse.setRenderParameter(&quot;test_render_param&quot;, &quot;168&quot;); } }
Пример: Event public void  processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { MyEventPub sampleAddress = new MyEventPub(); sampleAddress.setStreet(&quot;myStreet&quot;); sampleAddress.setCity(&quot;myCity&quot;); actionResponse.setEvent (new QName(&quot;MyEventPub&quot;), sampleAddress); } public void  processEvent (EventRequest req, EventResponse resp)‏ throws PortletException, IOException { Event event =  req.getEvent() ; MyEventPub sampleAddress = (MyEventPub) event.getValue(); resp.setPortletMode(PortletMode.EDIT); } }
Пример: Resource public void  serveResource (ResourceRequest request, ResourceResponse response) throws PortletException, IOException { String goal = request.getParameter(&quot;goal&quot;); if (goal != null && goal.equals(&quot;image&quot;)) { response.setContentType(&quot; image/jpeg &quot;); Graphics2D graphics; OutputStream stream =  response.getPortletOutputStream() ; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(stream); BufferedImage bi = new BufferedImage(...); ... encoder.encode(bi); } else { response.setContentType(&quot; text/html ; charset=utf-8&quot;); PrintWriter w =  response.getWriter() ; w.println(&quot;Here's the markup in serveResource&quot;); } }
Пример: Dispatcher private static final String VIEW_PAGE = &quot;/WEB-INF/jsp/view.jsp&quot;; public void  doView (RenderRequest request, RenderResponse response)‏ throws PortletException, IOException { response.setContentType(&quot;text/html&quot;); getPortletContext (). getRequestDispatcher (VIEW_PAGE). include (request, response); }
Пример: Taglib <%@taglib uri=&quot;http://java.sun.com/portlet_2_0&quot; prefix=&quot;portlet&quot;%> < portlet:defineObjects  /> <br/> < portlet:renderURL  var=&quot;renderURL&quot;/> <br/> Link to render: <a href=&quot;<%=renderURL %>&quot;>here</a> WindowState is <br/> <%=  renderRequest.getWindowState() .toString()%> <br/> PortletMode is <br/> <%=  renderRequest.getPortletMode() .toString()%> <br/>
Пример: Preferences ---portlet.xml------------------------------------------------------------------------------- < portlet-preferences > <preference> <name>message</name> <value>Defaut message</value> <read-only>false</read-only> </preference> </portlet-preferences> ---PreferencesPortlet.java--------------------------------------------------------------- PortletPreferences prefs =  actionRequest.getPreferences() ; prefs.setValue(&quot;message&quot;, &quot;My New Message&quot;); prefs.store(); ... String message = prefs.getValue(&quot;message&quot;, “&quot;); -------------------------------------------------------------------------------------------------
Пример: Session portletRequest.getPortletSession(); setAttribute(name, value, PortletSession.APPLICATION_SCOPE); setAttribute(name, value, PortletSession.PORTLET_SCOPE);
Пример: Public parameters <portlet-app ... version=&quot;2.0&quot;> <portlet> <description xml:lang=&quot;EN&quot;>PublicParameterPortlet</description> <portlet-name>PublicParamterPortlet</portlet-name> ... < supported-public-render-parameter > country </supported-public-render-parameter> </portlet> < public-render-parameter > <identifier>country</identifier> <name>country</name> </public-render-parameter> </portlet-app>
Пример: Cache Expiration ... <expiration-cache>10</expiration-cache> ... Validation response.getCacheControl().setETag(someID);
WSRP WSRP - удаленные портлеты
Итог
Ресурсы www.exoplatform.com Документация wiki.exoplatform.org Просмотр исходников fisheye.exoplatform.org Блог blog.exoplatform.org jira.exoplatform.org builder.exoplatform.org

More Related Content

What's hot

Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perlИван mrRico
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Fedor Malyshkin
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianSergiy Shychynov
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЯковенко Кирилл
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 

What's hot (11)

Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perl
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
бегун
бегунбегун
бегун
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
php frameworks
php frameworksphp frameworks
php frameworks
 

Viewers also liked

Grafico semanal del ibex 35 para el 30 03 2012
Grafico semanal del ibex 35 para el 30 03 2012Grafico semanal del ibex 35 para el 30 03 2012
Grafico semanal del ibex 35 para el 30 03 2012Experiencia Trading
 
Prueba guia fechas
Prueba guia fechasPrueba guia fechas
Prueba guia fechasmisa0830
 
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...Jeremy Liu
 
Custom connector development using mule DevKit
Custom connector development using mule DevKitCustom connector development using mule DevKit
Custom connector development using mule DevKitRamakrishna Narkedamilli
 
Next Ventures' Corporate Brochure 2016
Next Ventures' Corporate Brochure 2016Next Ventures' Corporate Brochure 2016
Next Ventures' Corporate Brochure 2016David King
 
Instrument Engg Resume
Instrument Engg ResumeInstrument Engg Resume
Instrument Engg Resumemohamed saffi
 
Stored procedure in Mule
Stored procedure in MuleStored procedure in Mule
Stored procedure in MuleKhasim Saheb
 
Mule high availability (ha) cluster
Mule high availability (ha) clusterMule high availability (ha) cluster
Mule high availability (ha) clusterAchyuta Lakshmi
 
Living and non living things
Living and non living thingsLiving and non living things
Living and non living thingsFuencisla Santos
 

Viewers also liked (11)

Grafico semanal del ibex 35 para el 30 03 2012
Grafico semanal del ibex 35 para el 30 03 2012Grafico semanal del ibex 35 para el 30 03 2012
Grafico semanal del ibex 35 para el 30 03 2012
 
Prueba guia fechas
Prueba guia fechasPrueba guia fechas
Prueba guia fechas
 
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
 
Custom connector development using mule DevKit
Custom connector development using mule DevKitCustom connector development using mule DevKit
Custom connector development using mule DevKit
 
Next Ventures' Corporate Brochure 2016
Next Ventures' Corporate Brochure 2016Next Ventures' Corporate Brochure 2016
Next Ventures' Corporate Brochure 2016
 
Instrument Engg Resume
Instrument Engg ResumeInstrument Engg Resume
Instrument Engg Resume
 
Stored procedure in Mule
Stored procedure in MuleStored procedure in Mule
Stored procedure in Mule
 
Mule high availability (ha) cluster
Mule high availability (ha) clusterMule high availability (ha) cluster
Mule high availability (ha) cluster
 
Living and non living things
Living and non living thingsLiving and non living things
Living and non living things
 
Anthony Michael Profile
Anthony Michael ProfileAnthony Michael Profile
Anthony Michael Profile
 
The plant kingdom
The plant kingdomThe plant kingdom
The plant kingdom
 

Similar to The Best Portlet

Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011Alexey Kakunin
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...CocoaHeads
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsguest092df8
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
XForms новое поколение веб-форм
XForms новое поколение веб-формXForms новое поколение веб-форм
XForms новое поколение веб-формAlexander Anokhin
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложенияСтажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения7bits
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
Обзор платформы B4
Обзор платформы B4Обзор платформы B4
Обзор платформы B4Bars Group
 
Yandex Lego олег оболенский
Yandex Lego   олег оболенскийYandex Lego   олег оболенский
Yandex Lego олег оболенскийMedia Gorod
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful ArchitechtureOntico
 
RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)Sergey Skvortsov
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsrit2010
 

Similar to The Best Portlet (20)

Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
XForms новое поколение веб-форм
XForms новое поколение веб-формXForms новое поколение веб-форм
XForms новое поколение веб-форм
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложенияСтажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
servlets.pdf
servlets.pdfservlets.pdf
servlets.pdf
 
Обзор платформы B4
Обзор платформы B4Обзор платформы B4
Обзор платформы B4
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Yandex Lego олег оболенский
Yandex Lego   олег оболенскийYandex Lego   олег оболенский
Yandex Lego олег оболенский
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture
 
RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)
 
Web sockets
Web socketsWeb sockets
Web sockets
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 

The Best Portlet

  • 2. Servlet/JSP HTML страницы Интегрирование веб-сервисов Эволюция сайтов. 1 3 2
  • 3. Пользователю нужна иформация от разных источников. Представленная в едином и настраиваемом интерфейсе.
  • 4. От простого сайта...
  • 5. до WebOS портала.
  • 6. ...и разных систем управления сайтами*? СКОЛЬКО ссылок в интернете ...? * CMS – content management system Многообразие.
  • 7. Тысячи разных CMS систем Один триллион уникальных ссылок в индексе Google* Десятки Java порталов Результат эволюции. * 25.07.2008 1 3 2
  • 8. Основная проблема ? Выбираем портал.
  • 9. 1998 – 2002 У каждого портала свой API. Что же дальше?
  • 10. JSR-168 JCP cтандарт первой портлетной спецификации. Jan. 2002 – 27 Oct. 2003
  • 11. Expert group of JSR-168 * * сокращенный список
  • 12. Определения Портлет контейнер - содержит портлеты и управляет их жизненным циклом Портлет - приложение, которое предоставляет определенную часть контента Портал - веб приложение для предоставления персонализации, аутентификации и контент агрегации 1 3 2
  • 13. Аутентификация Агрегация Персонализация Описание Portlet 1. 1 3 2 Кастомизация 4
  • 14. Динамические ресурсы AJAX Взаимодействие портлетов Q: Что ещё не хватает? 1 2
  • 15. JSR-286 JCP cтандарт второй портлетной спецификации. Nov. 2005 – 12 Jun. 2008
  • 16. Expert group of JSR-286 * * сокращенный список
  • 17. События Взаимодействие портлетов * Публичные параметры Описание Portlet 2. 1 3 2 Сессии 4 Ресурсы 5 * IPC - inter portlet communication Фильтры 6
  • 18. eXo Portlet Container
  • 20. Портлеты и сервлеты Отличия Сходства Экстра функциональность 1 3 2 P&S : Portlets and Servlets
  • 21. P&S: Сходства Портлеты - java технология, базирующаяся на веб компонентах. Портлетами и их жизненным циклом управляет специальный контейнер. Портлеты производят динамический контент. Взаимодействуют с веб клиентами через парадигму запрос/ответ.
  • 22. P&S: Отличия Только часть разметки. Вызываются через URLs сконструированные portlet API. Взаимодействие через портал. Обработка: action, event, render и resource. Предопределенные portlet mode и window state. Несколько на одной странице.
  • 23. P&S: Экстра функциональность Портлеты могут сохрнять persistent configuration. Портлеты имеют доступ к user profile. Могут сохранять временную информацию в двух областях видимости: application-wide scope и portlet private scope. Могут отправлять и получать события (events).
  • 26. Конфигурация: portlet.xml Минимальная конфигурация портлетного приложения. <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> < portlet-app xmlns=&quot; http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd&quot; version=&quot;1.0&quot;> < portlet > < portlet-name >HelloWorldPortlet</portlet-name> < portlet-class > org.exoplatform.HelloWorldPortlet </portlet-class> < supports > < mime-type >text/html</mime-type> </supports> </portlet> </portlet-app>
  • 27. Конфигурация: web.xml <listener> <listener-class> org.exoplatform.services.portletcontainer.impl.servlet. PortletApplicationListener </listener-class> </listener> <servlet> <servlet-name>PortletWrapper</servlet-name> <servlet-class> org.exoplatform.services.portletcontainer.impl.servlet . ServletWrapper </servlet-class> </servlet> <servlet-mapping> <servlet-name>PortletWrapper</servlet-name> <url-pattern> /PortletWrapper </url-pattern> </servlet-mapping>
  • 28. Жизненный цикл processAction()‏ init()‏ processEvent() * 1 3 2 render()‏ 4 serveResource() * 5 destroy()‏ 6 * в JSR-286
  • 29. Портлет API PortletRequest GenericPortlet PortletResponse 1 3 2
  • 37. Попробуем в действии Event пример. Action пример. Render пример.
  • 38. Пример: Render public class HelloWorldPortlet extends GenericPortlet { public void doView (RenderRequest renderRequest, RenderResponse renderResponse)‏ throws PortletException, IOException { renderResponse.setContentType(&quot;text/html; charset=UTF-8&quot;); PrintWriter w = renderResponse.getWriter(); w.println(&quot;Hello, World!&quot;); } }
  • 39. Пример: Action public class HelloWorldPortlet extends GenericPortlet { public void processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { actionRequest.setAttribute(&quot;test_attribute&quot;, &quot;test&quot;); actionResponse.setRenderParameter(&quot;test_render_param&quot;, &quot;168&quot;); } }
  • 40. Пример: Event public void processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { MyEventPub sampleAddress = new MyEventPub(); sampleAddress.setStreet(&quot;myStreet&quot;); sampleAddress.setCity(&quot;myCity&quot;); actionResponse.setEvent (new QName(&quot;MyEventPub&quot;), sampleAddress); } public void processEvent (EventRequest req, EventResponse resp)‏ throws PortletException, IOException { Event event = req.getEvent() ; MyEventPub sampleAddress = (MyEventPub) event.getValue(); resp.setPortletMode(PortletMode.EDIT); } }
  • 41. Пример: Resource public void serveResource (ResourceRequest request, ResourceResponse response) throws PortletException, IOException { String goal = request.getParameter(&quot;goal&quot;); if (goal != null && goal.equals(&quot;image&quot;)) { response.setContentType(&quot; image/jpeg &quot;); Graphics2D graphics; OutputStream stream = response.getPortletOutputStream() ; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(stream); BufferedImage bi = new BufferedImage(...); ... encoder.encode(bi); } else { response.setContentType(&quot; text/html ; charset=utf-8&quot;); PrintWriter w = response.getWriter() ; w.println(&quot;Here's the markup in serveResource&quot;); } }
  • 42. Пример: Dispatcher private static final String VIEW_PAGE = &quot;/WEB-INF/jsp/view.jsp&quot;; public void doView (RenderRequest request, RenderResponse response)‏ throws PortletException, IOException { response.setContentType(&quot;text/html&quot;); getPortletContext (). getRequestDispatcher (VIEW_PAGE). include (request, response); }
  • 43. Пример: Taglib <%@taglib uri=&quot;http://java.sun.com/portlet_2_0&quot; prefix=&quot;portlet&quot;%> < portlet:defineObjects /> <br/> < portlet:renderURL var=&quot;renderURL&quot;/> <br/> Link to render: <a href=&quot;<%=renderURL %>&quot;>here</a> WindowState is <br/> <%= renderRequest.getWindowState() .toString()%> <br/> PortletMode is <br/> <%= renderRequest.getPortletMode() .toString()%> <br/>
  • 44. Пример: Preferences ---portlet.xml------------------------------------------------------------------------------- < portlet-preferences > <preference> <name>message</name> <value>Defaut message</value> <read-only>false</read-only> </preference> </portlet-preferences> ---PreferencesPortlet.java--------------------------------------------------------------- PortletPreferences prefs = actionRequest.getPreferences() ; prefs.setValue(&quot;message&quot;, &quot;My New Message&quot;); prefs.store(); ... String message = prefs.getValue(&quot;message&quot;, “&quot;); -------------------------------------------------------------------------------------------------
  • 45. Пример: Session portletRequest.getPortletSession(); setAttribute(name, value, PortletSession.APPLICATION_SCOPE); setAttribute(name, value, PortletSession.PORTLET_SCOPE);
  • 46. Пример: Public parameters <portlet-app ... version=&quot;2.0&quot;> <portlet> <description xml:lang=&quot;EN&quot;>PublicParameterPortlet</description> <portlet-name>PublicParamterPortlet</portlet-name> ... < supported-public-render-parameter > country </supported-public-render-parameter> </portlet> < public-render-parameter > <identifier>country</identifier> <name>country</name> </public-render-parameter> </portlet-app>
  • 47. Пример: Cache Expiration ... <expiration-cache>10</expiration-cache> ... Validation response.getCacheControl().setETag(someID);
  • 48. WSRP WSRP - удаленные портлеты
  • 50. Ресурсы www.exoplatform.com Документация wiki.exoplatform.org Просмотр исходников fisheye.exoplatform.org Блог blog.exoplatform.org jira.exoplatform.org builder.exoplatform.org