More Related Content Similar to The Best Portlet Similar to The Best Portlet (20) The Best Portlet6. ...и разных систем управления сайтами*? СКОЛЬКО ссылок в интернете ...? * CMS – content management system Многообразие. 7. Тысячи разных CMS систем Один триллион уникальных ссылок в индексе Google* Десятки Java порталов Результат эволюции. * 25.07.2008 1 3 2 9. 1998 – 2002 У каждого портала свой API. Что же дальше? 12. Определения Портлет контейнер - содержит портлеты и управляет их жизненным циклом Портлет - приложение, которое предоставляет определенную часть контента Портал - веб приложение для предоставления персонализации, аутентификации и контент агрегации 1 3 2 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="1.0" encoding="UTF-8"?> < portlet-app xmlns=" http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd " xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="1.0"> < 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> 38. Пример: Render public class HelloWorldPortlet extends GenericPortlet { public void doView (RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException { renderResponse.setContentType("text/html; charset=UTF-8"); PrintWriter w = renderResponse.getWriter(); w.println("Hello, World!"); } } 39. Пример: Action public class HelloWorldPortlet extends GenericPortlet { public void processAction (ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException, IOException { actionRequest.setAttribute("test_attribute", "test"); actionResponse.setRenderParameter("test_render_param", "168"); } } 40. Пример: Event public void processAction (ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException, IOException { MyEventPub sampleAddress = new MyEventPub(); sampleAddress.setStreet("myStreet"); sampleAddress.setCity("myCity"); actionResponse.setEvent (new QName("MyEventPub"), 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("goal"); if (goal != null && goal.equals("image")) { response.setContentType(" image/jpeg "); Graphics2D graphics; OutputStream stream = response.getPortletOutputStream() ; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(stream); BufferedImage bi = new BufferedImage(...); ... encoder.encode(bi); } else { response.setContentType(" text/html ; charset=utf-8"); PrintWriter w = response.getWriter() ; w.println("Here's the markup in serveResource"); } } 42. Пример: Dispatcher private static final String VIEW_PAGE = "/WEB-INF/jsp/view.jsp"; public void doView (RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); getPortletContext (). getRequestDispatcher (VIEW_PAGE). include (request, response); } 43. Пример: Taglib <%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> < portlet:defineObjects /> <br/> < portlet:renderURL var="renderURL"/> <br/> Link to render: <a href="<%=renderURL %>">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("message", "My New Message"); prefs.store(); ... String message = prefs.getValue("message", “"); ------------------------------------------------------------------------------------------------- 46. Пример: Public parameters <portlet-app ... version="2.0"> <portlet> <description xml:lang="EN">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);