portlet jsr168/286 - jugsardegna.org

54
Portlet JSR168/286 Sassari, 21 Maggio 2011

Upload: others

Post on 09-Dec-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Portlet JSR168/286 - jugsardegna.org

Portlet JSR168/286

Sassari, 21 Maggio 2011

Page 2: Portlet JSR168/286 - jugsardegna.org

2  

Agenda  

1.   JSR168  2.   JSR286  3.   Spring  MVC  Portlet  4.   Esempio  pra?co  

Page 3: Portlet JSR168/286 - jugsardegna.org

3  

Portale  

•   facilmente  inseribili  nella  pagina  •   unità  indipenden5  •   configurabili  •   riusabili  anche  in  altri  contes5  e  portali    

Applicazioni  

Porta  di  accesso  unica  a  un  insieme  di  applicazioni,  da5  e  servizi.  

Portale  

Page 4: Portlet JSR168/286 - jugsardegna.org

       

Soluzioni  proprietarie  

4  

Portlet  -­‐  evoluzione  

             

Standard  :  JSR168  

Page 5: Portlet JSR168/286 - jugsardegna.org

5  

JSR  168  (Java  Portlet  Specifica?on  1.0)  

       

La  specifica  JSR  168  è  stata  rilasciata  nel  2003  •   al  gruppo  di  lavoro  hanno  partecipato  Apache,      BEA,  Broadvision,  IBM,  Oracle,  SAP,  SUN,  Sybase,  TIBCO  

 

• il  ruolo  e  le  funzionalità  del  Portlet  Container    •   il  contraTo  tra  il  Container  e  i  Portlet    •   la  ges5one  del  ciclo  di  vita  dei  Portlet    •   il  packaging  per  la  distribuzione  dei  Portlet    •   l'interazione  con  Web  Services  for  Remote  Portlets  (WSRP)  di  OASIS    

 

Definisce  

Page 6: Portlet JSR168/286 - jugsardegna.org

6  

Portlet  –  Portlet  container  

Portlet  

Componen5  web  Java,  ges55  da  un  portlet  container,    che  processano  le  richieste  ricevute  e  generano  contenu5  dinamici.    

Portlet  container  

• con5ene  i  portlet  e  ges5sce  il  loro  ciclo  di  vita.  • si  occupa  di  immagazzinare  le  preference  e  le  configurazioni  di  ogni  portlet  •   riceve  le  request  dal  portale  e  le  indirizza  alle  portlet  che  ges5sce  

Page 7: Portlet JSR168/286 - jugsardegna.org

7  

Ciclo  di  vita  di  un  portlet  

Il  ciclo  di  vita  è  ges5to  dai  4  metodi  espos5  dall’interfaccia  portlet:  •   init:  il  metodo  viene  chiamato  dal  container  quando  il  portlet  viene  instanziato  • destroy:  viene  chiamato  dal  container  quando  il  portlet  viene  distruTo  • processAc?on:  viene  chiamato  dopo  che  l’utente  ha  effeTuato  una  richiesta;  serve  a  processare  i  da5  avu5  in  input  • render:  va  in  esecuzione  ogni  volta  che  il  portlet  si  visualizza  nella  pagina  web    

Page 8: Portlet JSR168/286 - jugsardegna.org

8  

javax.portlet.Portlet  

Page 9: Portlet JSR168/286 - jugsardegna.org

9  

Caricamento  pagina  

Page 10: Portlet JSR168/286 - jugsardegna.org

10  

Process  di  una  ac?on  

Page 11: Portlet JSR168/286 - jugsardegna.org

11  

Ac?onRequest  –  RenderRequest  

•   Derivano  dall’oggeTo  PortletRequest  •   Sono  so#oinsiemi  dell’HTpRequest  •   è  compito  del  portlet  container  dividere  i  parametri  tra  i  vari  portlet  della  pagina  

•     I  parametri  in  ac5onRequest  sono  in  generale  diversi  da  quelli  in  renderRequest  •   a  meno  che  il  portlet  non  li  inserisca  in  ac5onResponse  

 Esempio  

String  value=request.getParameter(“test”);  response.setRenderParameter(“test”,  value);  

Il  parametro  test  è  preso  dalla  ac5onRequest  e  passato  in  ac5onResponse  

Page 12: Portlet JSR168/286 - jugsardegna.org

12  

PortletSession  

Ogni  portlet  ha  il  proprio  PortletSession  •   i  parametri  inseri5  nel  PortletSession  con  lo  scope  APPLICATION  sono  visibili  anche  in  HTpSession  

 

Esempio  PortletSession  session  =  request.getSession(true);  session.setATribute(“home.url”,url,PortletSession.APPLICATION_SCOPE);  session.setATribute(“bkg.color”,”RED”,PortletSession.PORTLET_SCOPE);  

ATributo  visibile  con  stesso  nome  anche  in  HTpSession    

ATributo  visibile    solo  al  portlet    

Page 13: Portlet JSR168/286 - jugsardegna.org

13  

Modalità  di  un  portlet  

La  specifica  definisce  3  modalità  standard:  • VIEW:  la  modalità  standard  che  ogni  portlet  deve  implementare  • EDIT:  consente  di  modificare  le  impostazioni  dell’utente  • HELP:  tale  modalità  presenta  informazioni  di  help  rela5ve  alla  portlet  

 I  vari  vendor  possono  comunque  aggiungere  modalità  differen5.    

Page 14: Portlet JSR168/286 - jugsardegna.org

14  

Portlet  taglib  

URI:    hTp://java.sun.com/portlet    PermeTono  alle  JSP  incluse  nel  portlet    •   di  avere  accesso  ad  elemen5  specifici  del  portlet  (render,  request,  id  del  portlet)  •   di  creare  i  link  per  l’interazione  con  il  portlet  

L’implementazione  delle  taglib  è  responsabilità  del  portlet  container    

Page 15: Portlet JSR168/286 - jugsardegna.org

15  

<portlet:namespace/>  

U5le  per  l’assegnazione  di  id  univoci  agli  elemen5  della  pagina  web,  sopraTuTo  se  sono  presen5  più  istanze  dello  stesso  portlet  nella  stessa  pagina          

Esempio  var  <portlet:namespace/>_resTab=new  ResultsTable(..);    <portlet:namespace/>_populateTable(output);    </script>                <table  id="<portlet:namespace/>_results">                                  <th><td>Nome</td><td>Cognome</td></th>                  </table>  

Ritorna  l’iden5fica5vo  univoco  del  portlet  all’interno  della  pagina  web  

Definizione  

Page 16: Portlet JSR168/286 - jugsardegna.org

16  

<portlet:defineObjects/>  

Esempio  <portlet:defineObjects/>  <%=renderResponse.setTitle("my  portlet  5tle")%>  

definisce  le  seguen5  variabili  all’interno  della  JSP:  •   renderRequest  •   renderResponse  •   portletConfig  

Definizione  

Page 17: Portlet JSR168/286 - jugsardegna.org

17  

<portlet:ac?onURL/>  

Esempio  <portlet:ac5onURL  var="searchAc5on">        <portlet:param  name="ac5on"  value="search"  />  </portlet:ac5onURL>  <form  ac5on="${searchAc5on}"  method="POST">  

crea  un  URL  che  punta  al  portlet  corrente  ed  invia  un  ac5on  request  con  i  parametri  specifica5  

Definizione  

portletMode:  la  modalità  del  portlet                var:  il  nome  della  variabile  nella  JSP  

Parametri  

Page 18: Portlet JSR168/286 - jugsardegna.org

18  

<portlet:renderURL/>  

Esempio  <portlet:renderURL  var=“helpUrl“  portletMode=“HELP”>  </portlet:renderURL>  <a  href=“${helpUrl}”>Help</a>  

crea  un  URL  che  punta  al  portlet  corrente  ed  invia  un  render  request  con  i  parametri  specifica5  

Definizione  

portletMode:  la  modalità  del  portlet                var:  il  nome  della  variabile  nella  JSP  

Parametri  

Page 19: Portlet JSR168/286 - jugsardegna.org

19  

Portlet  library  

I  portlet  possono  essere  inserite  in  un  opportuno  file  war  •   il  file  deve  contenere  le  classi  e  tuTe  le  resources  rela5ve  ad  essi  • nel  folder  WEB-­‐INF  deve  essere  presente  il  file  portlet.xml  

 

Page 20: Portlet JSR168/286 - jugsardegna.org

20  

portlet.xml  

<portlet>        <descrip5on  xml:lang="it">Portlet  di  test  A</descrip5on>      <portlet-­‐name>TestAPortlet</portlet-­‐name>    <display-­‐name  xml:lang="it">Portlet  di  test  A</display-­‐name>    <portlet-­‐class>org.springframework.web.portlet.DispatcherPortlet</portlet-­‐class>      <init-­‐param>                <name>contextConfigLoca5on</name>                <value>/WEB-­‐INF/context/TestPortletA-­‐context.xml</value>        </init-­‐param>        <expira5on-­‐cache>0</expira5on-­‐cache>        <supports>            <mime-­‐type>text/html</mime-­‐type>            <portlet-­‐mode>view</portlet-­‐mode>            <portlet-­‐mode>help</portlet-­‐mode>        </supports>      <supported-­‐locale>en</supported-­‐locale>  …  </portlet>    

Page 21: Portlet JSR168/286 - jugsardegna.org

21  

Limi?  di  JSR168  

La  specifica  presenta  alcune  limitazioni:  •   manca  un  meccanismo  standard  per  fare  interagire  tra  loro  i  portlet  (Inter  Portlet  Communica?on)  •   non  è  possibile  oTenere  una  risorsa  direTamente  da  un  portlet  •   bisogna  passare  dal  portlet  containet  

•   integrazione  con  AJAX  non  supportata  internamente  •   a  meno  che  non  sia  offerta  dal  portlet  container  in  modo  non  standard  

     

Page 22: Portlet JSR168/286 - jugsardegna.org

22  

Integrazione  con  AJAX  

Web  container                        

Portlet  container          

 Servlet  container  

         

PortletSession  

HTpSession  

JSP  

JSP  

caricamento  iniziale  

aggiornamento  AJAX  

render  

AJAX  request  

Le  due  session  condividono  i  parametri  con  scope  APPLICATION_SCOPE  

JavaScript  

Portlet  

Servlet  

Page 23: Portlet JSR168/286 - jugsardegna.org

23  

Agenda  

1.   JSR168  2.   JSR286  3.   Spring  MVC  Portlet  4.   Esempio  pra?co  

Page 24: Portlet JSR168/286 - jugsardegna.org

24  

JSR286  (Java  Portlet  Specifica?on  2.0)  

La  specifica  JSR  286  è  stata  rilasciata  nel  2008  •   a  febbraio  2006  fu  cos5tuito  il  JSR  286  Expert  Group  al  fine  di  arrivare  alla  Java  Portlet  Specifica5on  2.0    

     

Novità  introdoee  

•   Even5:  ogni  portlet  può  lanciare  e  ricevere  determina5  even5  • Public  render  parameter:  possibilità  per  i  portlet  di  condividere  parametri  tra  loro  • Possibilità  per  un  portlet  di  res5tuire  una  risorsa.  

Page 25: Portlet JSR168/286 - jugsardegna.org

25  

GenericPortlet  

Page 26: Portlet JSR168/286 - jugsardegna.org

26  

Even?-­‐  dichiarazione  dell’evento  

portlet.xml  

<event-­‐defini5on>        <qname  xmlns:x="hTp://com.alex/test/portlets/ns">x:event</qname>        <value-­‐type>java.lang.String</value-­‐type>  </event-­‐defini5on>    

Il  parametro  value-­‐type  indica  la  classe  dell’evento  

Page 27: Portlet JSR168/286 - jugsardegna.org

27  

Even?  -­‐  lancio  dell’evento  

portlet.xml  <portlet>      <descrip5on  xml:lang="it">Portlet  di  test  A</descrip5on>      <supported-­‐publishing-­‐event>                  <qname  xmlns:x="hep://com.alex/test/portlets/ns">x:event</qname>      </supported-­‐publishing-­‐event>    

codice  String  event="Test  Event";  QName  name=new  QName("hTp://com.alex/test/portlets/ns",  "event");    response.setEvent(name,  event);    //Ac?onResponse  

Page 28: Portlet JSR168/286 - jugsardegna.org

28  

Even?  -­‐  process  dell’evento  

portlet.xml  <portlet>      <descrip5on  xml:lang="it">Portlet  di  test  B</descrip5on>      <supported-­‐processing-­‐event>                  <qname  xmlns:x="hep://com.alex/test/portlets/ns">x:event</qname>      </supported-­‐processing-­‐event>    

codice  

public  void  processEvent(EventRequest  request,  EventResponse  response){        Event  event=request.getEvent();        String  qname=  event.getQName();  }  

Page 29: Portlet JSR168/286 - jugsardegna.org

29  

Even?  -­‐  flusso  

Page 30: Portlet JSR168/286 - jugsardegna.org

30  

Parametri  pubblici  -­‐  dichiarazione  

portlet.xml  

<public-­‐render-­‐parameter>        <iden?fier>foo</iden?fier>        <qname  xmlns:x=“hTp://com.alex/test/portlets/ns”>x:foo2</qname>  </public-­‐render-­‐parameter>  

I  parametri  pubblici  vengono  dichiara5  in  portlet.xml  in  una  opportuna  sezione  •   vengono  dis5n5  tra  loro  u5lizzando  opportuni        iden5fier  

Page 31: Portlet JSR168/286 - jugsardegna.org

31  

Parametri  pubblici  -­‐  u?lizzo  

portlet.xml  <portlet>        <portlet-­‐name>portletA</portlet-­‐name>        …        <supported-­‐public-­‐render-­‐parameter>foo</supported-­‐public-­‐render-­‐parameter>  </portlet>  

I  portlet  dichiarano  in  portlet.xml  i  parametri  pubblici  che  u5lizzeranno  •   i  parametri  sono  iden5fica5  con  il  loro  iden5fier  

Page 32: Portlet JSR168/286 - jugsardegna.org

32  

Parametri  pubblici  –  flusso    

public  void  processAc5on(Ac5onRequest  request,  Ac5onResponse  response){  response.setRenderParameter(“foo",  foo);}  

Portlet  A  

public  void  render(RenderRequest  request,  RenderResponse  response){  String  value  =  response.getParameter(“foo");}  

Portlet  B  

A   B  

C  

Page 33: Portlet JSR168/286 - jugsardegna.org

33  

Resource  -­‐  <portlet:resourceURL/>  

Esempio  

<portlet:resourceURL  var="changePage"  id="changePage">        <portlet:param  name=“par1”  value=“val1”/>  </portlet:resourceURL>  

crea  l’url  per  una  risorsa,  iden5ficata  da  un  id,  fornita  dal  portlet  

Definizione  

var:  il  nome  della  variabile  all’interno  della  JSP.    id:  l’iden5fica5vo  della  risorsa  richiesta  

Parametri  

Page 34: Portlet JSR168/286 - jugsardegna.org

34  

Resource  -­‐    flusso  

public  class  TestAPortlet  extends  GenericPortlet{              public  void  serveResource(ResourceRequest  request,  ResourceResponse  response){    }  }  

A  risorsa   B  

C  

Page 35: Portlet JSR168/286 - jugsardegna.org

35  

Integrazione  con  AJAX  

   

Web  container                    

       

Portlet  container                  

PortletSession  

JSP  

JSP  

caricamento  iniziale  

aggiornamento  AJAX  

render  

serveResource  

response:    contentType:  applica5on/json  JavaScript  

Portlet  

Page 36: Portlet JSR168/286 - jugsardegna.org

36  

Agenda  

1.   JSR168  2.   JSR286  3.   Spring  MVC  Portlet  4.   Esempio  

Page 37: Portlet JSR168/286 - jugsardegna.org

37  

Spring  MCV  Portlet  

•  modello  flessibile  e  leggero  •  Implementa  il  classico  paTern  MVC  •  analogo  al  modello  Spring  MVC  

Caraeeris?che  

•  DispatcherPortlet  •  HandlerMapping  •  Controller  •  ViewResolver  

Componen?  

Page 38: Portlet JSR168/286 - jugsardegna.org

38  

DispatcherPortlet  

     

portlet.xml  

<portlet-­‐class>org.springframework.web.portlet.DispatcherPortlet</portlet-­‐class>      <init-­‐param>                <name>contextConfigLoca5on</name>                <value>/WEB-­‐INF/context/TestPortletA-­‐context.xml</value>        </init-­‐param>    

Page 39: Portlet JSR168/286 - jugsardegna.org

39  

HandlerMapping  

<bean  class="org.springframework.web.portlet.mvc.annota5on.DefaultAnnota5onHandlerMapping">              <property  name="interceptors">                    <bean  class="org.springframework.web.portlet.handler.ParameterMappingInterceptor"  />              </property>  </bean>  

context.xml  

Responsabilità  

Mappa  le  PortletRequest  verso  gli  opportuni  controllers  

Page 40: Portlet JSR168/286 - jugsardegna.org

40  

ViewResolver  

<bean  id="viewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver">                    <property  name="cache"  value="true"  />                    <property  name="viewClass“  value="org.springframework.web.servlet.view.JstlView"  />                    <property  name="prefix"  value="/WEB-­‐INF/jsp/testA/"  />                  <property  name="suffix"  value=".jsp"  />  </bean>  

context.xml  

Responsabilità  

Sceglie  la  view  opportuna  a  seconda  del  contesto  

Page 41: Portlet JSR168/286 - jugsardegna.org

41  

Interazione  tra  i  componen?  

     

DispatcherPortlet  

HandlerMapping   Controller  

ModelAndView  

ViewResolver  View  

request  lookup  

select  

generate  

return  

lookup  

select  

render  

Page 42: Portlet JSR168/286 - jugsardegna.org

42  

Controller  annota?  

Nuovi  in  Spring  2.5  

• Rendono  più  snelle  le  configurazioni  • PermeTono  di  riunire  la  logica  nella  stessa  classe  di  controller  • Possibilità  di  u5lizzare  segnature  ‘libere’  nei  metodi.  

Caraeeris?che  

Page 43: Portlet JSR168/286 - jugsardegna.org

43  

Controller  annota?  –  metodi  

•   oggeTo  ModelAndView  • Model  o  ogge~  del  model  •   oggeTo  View  •   string  che  iden5fica  l’oggeTo  view  

Output  metodi  

Possono  essere  in  qualsiasi  ordine:  • Request/response  • Model  o  ogge~  del  model  •   Errors  •   java.u5l.Locale  

Parametri  metodi  

esempio  

public  void  searchAc5on(@ModelATribute("search")  SearchUserForm  search,Model  model,Ac5onRequest  request){  

Page 44: Portlet JSR168/286 - jugsardegna.org

44  

Controller  annota?  –  component-­‐scan  

<context:component-­‐scan  base-­‐package=  "com.alex.springportlet.testA"  />  

 <context:annota5on-­‐config  />  

context.xml  

Il  tag  component-­‐scan  indica  al  framework  dove  cercare  i  controller  annota5  da  usare  per  il  portlet  

Page 45: Portlet JSR168/286 - jugsardegna.org

45  

@Controller  

La  classe  marcata  con  l’annota5on  @Controller  viene  u5lizzata  come  controller  •   il  parametro  value  indica  l’id  del  bean  nel  file  di  context  

     

codice  

@Controller(value="testAController")  public  class  TestAPortletController  extends  GeneralController{  

context.xml    <bean  id="testAController"  class="com.alex.springportlet.testA.controller.TestAPortletController">                      <property  name="service"  ref="serviceImpl"/>…    

Page 46: Portlet JSR168/286 - jugsardegna.org

46  

@RequestMapping  -­‐  1  

A  livello  di  classe,viene  usata  per  dis5nguere  I  vari  controller  in  base  alle  modalità  che  ges5scono    

     

codice  

@Controller(value="testAController")  @RequestMapping(“VIEW”)  public  class  TestAPortletController  extends  GeneralController{  

In  questo  caso  il  controller    è  u5lizzato    per  ges5re  la  modalità  VIEW    

Page 47: Portlet JSR168/286 - jugsardegna.org

47  

@RequestMapping  -­‐  2  

A  livello  di  metodo,  indica  il  metodo  del  controller  da  richiamare  a  par5re  da  una  certa  ac5on/render  request                          

codice  

@RequestMapping(params="ac?on=launchEvent")          public  void  launchEventAc5on(Ac5onRequest  request,Ac5onResponse  response){}    @RequestMapping(params="ac?on=launchEvent")          public  String  launchEventRender(RenderRequest  request,RenderResponse  response){                  return  "index";          }  

Page 48: Portlet JSR168/286 - jugsardegna.org

48  

@RequestMapping  -­‐  3  

Page 49: Portlet JSR168/286 - jugsardegna.org

49  

@SessionAeributes  

A  livello  di  classe,  iden5fica  gli  aTribu5  del  model  da  inserire  in  sessione                            

codice  @SessionAeributes({"search","output"})  public  class  TestAPortletController  {    @RequestMapping          public  String  begin(Model  model,PortletSession  session){                  SearchUserForm  search=new  SearchUserForm();                model.addATribute("search",  search);…    

Il  framework  colloca  automa5camente  search  in  sessione    

Page 50: Portlet JSR168/286 - jugsardegna.org

50  

@ModelAeribute  

A  livello  di  parametro,  indica  che  il  parametro  di  un  determinato  metodo  va  preso  dal  model                          

codice  

public  void  jsonChangePage(@ModelATribute("search")  SearchUserForm  search,Model  model…)  

Il  parametro  search  viene  preso  dal  model    

Page 51: Portlet JSR168/286 - jugsardegna.org

51  

@EventMapping  

A  livello  di  metodo,  iden5fica  il  metodo  che  deve  traTare  un  par5colare  evento                                        

codice  

@EventMapping("{hep://com.alex/test/portlets/ns}event")          public  void  handleEvent(Event  event,EventRequest  request)  throws  Excep5on  {                  …          }  

JSR  286  

Page 52: Portlet JSR168/286 - jugsardegna.org

52  

@ResourceMapping  

A  livello  di  metodo,  iden5fica  il  metodo  che  deve  res5tuire  una  determinata  resource                          

codice  

@ResourceMapping(value="changePage")          public  void  jsonChangePage(…,  

JSR  286  

<portlet:resourceURL  var="changePage"  id="changePage">        <portlet:param  name=“par1”  value=“val1”/>  </portlet:resourceURL>  

Page 53: Portlet JSR168/286 - jugsardegna.org

53  

Agenda  

1.   JSR168  2.   JSR286  3.   Spring  MVC  Portlet  4.   Esempio  

Page 54: Portlet JSR168/286 - jugsardegna.org

54  

Esempio  

•   IDE:  Netbeans  6.9.1  

•   Spring  v.3.0.5  

•   Maven  

•   Portlet  Container:  Apache  Pluto  

• JQuery