SiteMeshjavaBin Side 1 SiteMesh javaBin – Eivind Waaler, BEKK Versjon 1.0
SiteMeshjavaBin Side 2 Min bakgrunn Utdanning fra HiST + UiO – 4 år Utvikler/arkitekt hos BEKK – 5 år Java/J2EE bakgrunn – 6 år Mye J2EE webapplikasjoner Hvordan blande Java/HTML?? Fokus på gode rammeverk og best-practice! 1 års erfaring med SiteMesh Mike Cannon-Brookes – SiteMesh, TSS 2004 (6.-8. mai)
SiteMeshjavaBin Side 3 Agenda Problemet Hva er SiteMesh? Et eksempel Hvordan funker det? Sammenligning med Struts Tiles Avansert bruk
SiteMeshjavaBin Side 4 Problemet Typisk formside: 20 linjer enkel og fokusert HTML Enkelt å vedlikehold Ser alle elementer og bruk Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 5 Problemet Med design skal siden se slik ut: 300 linjer kompleks HTML Vanskelig å finne igjen de 20 linjene Vanskeligere å forstå bruken! Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 6 Problemet Vanskelig å separere innhold og presentasjon! Alle webapplikasjoner trenger det Trenger dekorering av websider: Header – tittel, logo etc. Footer – copyright o.l. Navigasjonselementer – toppmeny, venstremeny etc. Andre viktige aspekter: “Portlets” – små paneler på websiden Browserspesifikke versjoner IE, Firefox, Opera etc. PC, Mobil, PDA, Set-top box etc. Søkeroboter Printbare utgaver Et lite eksempel… Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 7 Eksempel på dekorering Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 8 Eksempel på dekorering Header Navigation Information Downloads Login News Search Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 9 Typiske løsninger Copy & paste SKIKKELIG DÅRLIG: Si opp noen utviklere JSP includes DÅRLIG: Mye vedlikehold, tette koblinger og økende kompleksitet XSLT OK: Fleksibelt, men vanskelig å debuge og lang læringskurve SiteMesh BRA: Enkelt, løst koblet, skalerbart og fleksibelt Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 10 Hva er SiteMesh? Open Source J2EE layout og dekoreringsmotor Decorator pattern for webapplikasjoner Analogi: Swing look & feel endring Kjerneverdier: Enkelhet, Fart og Fleksibilitet! Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 11 Hva er SiteMesh? Implementert som et Servlet 2.3 request filter Trenger Servlet 2.3 kompatibel server Kjører på alle J2EE servere Typisk request (uten SiteMesh): Web Container 1. Incoming request Web App 2. Generate decorated page (Servlet, JSP, Perl, PHP, HTML etc) 3. Return result Browser Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 12 Hva er SiteMesh? Request med SiteMesh filter aktivert: Web Container Web App 2. Generate page (Servlet, JSP, Perl, PHP, HTML etc) Browser 1. Incoming request 5. Return result SiteMesh Filter 3. Get Decorator 4. Decorate page Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 13 Enkelt eksempel Installere SiteMesh Skrive enkel JSP side Skrive enkel JSP dekorator Legge på heading Legge innholdet i en boks Koble side og dekorator sammen Vise resultatet Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 14 Installasjon 1.Kopiere sitemesh-2.x.jar til WEB-INF/lib/ katalogen på web-app 2.Installere og sette opp servlet filter i WEB-INF/web.xml: sitemesh com...sitemesh...PageFilter sitemesh /* Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 15 Skrive en enkel side About JavaBlogs JavaBlogs aggregates the blogs of Java bloggers. Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 16 Skrive en enkel dekorator java.blogs - "> Section: MyDecorator.jsp Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 17 Koble dekoratoren til sidene Mapper dekoratoren til alle URLer i applikasjonen Enkel URL-mapping gjøres i /WEB-INF/decorators.xml /* Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 18 Resultatet! java.blogs - About JavaBlogs About JavaBlogs Section: About JavaBlogs aggregates the blogs of Java bloggers. Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 19 Hvordan funker SiteMesh? Result (HTML) Content (HTML fragment) Content Source (JSP, Perl, PHP, HTML etc) Field Map 2. SiteMesh Presentation (Decorator - JSP) Decorator Mappers 3. 1.Server lager HTML 2.SiteMesh leser inn HTML 3.SiteMesh velger dekorator 4.SiteMesh dekorerer HTML Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side Server lager HTML Hold HTML enkel, uten noe presentasjon/design Eksempel på enkel HTML: About JavaBlogs JavaBlogs aggregates the blogs of Java bloggers. Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side SiteMesh leser inn HTML Gjør om HTML koden til en tabell (Map) av felter Title og Body hentes direkte fra HTML Egne felter for body attributes (body.) meta tags (meta.) content blocks (content.) Eksempel på tabell (Map): KeyValue titleAbout JavaBlogs meta.sectionAbout bodyJavaBlogs aggregates the blogs of Java blogges body.bgcolor#ffffff Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side SiteMesh velger dekorator Sekvenser med regler (DecoratorMapper objects) velger dekorator for hver request ~10 innebyge mappers, lett å skrive egne java.blogs - "> Section: Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side SiteMesh dekorerer HTML Resulterende kode er ren HTML Eksempel på resultat: java.blogs - About JavaBlogs About JavaBlogs Section: About JavaBlogs aggregates the blogs of Java bloggers. Kilde: Mike Cannon-Brookes - Atlassian
SiteMeshjavaBin Side 24 SiteMesh vs. Struts Tiles Tiles – metode 1 (JSP): Tiles – metode 2 (XML defs):
SiteMeshjavaBin Side 25 SiteMesh vs. Struts Tiles SiteMesh leser og forstår HTML Tiles må definere feltene selv i tiles-def.xml? SiteMesh enklere og ryddigere? Sidene fullstendig løsrevet fra dekorator – AOP for HTML?? Tiles kan ha mange “tiles” på en side SiteMesh bruker kun en dekorator av gangen SiteMesh – veldig enkelt å bytte dekorator In the sitemesh vs tiles comparison... I think there can't be any comparison. Tiles is a usual piece of software with all limitations imposed by usual design and Sitemesh is a wonder of technology with all 'problems' imposed by revolutionary design :-) Kilde: Dorel Vaida – TSS
SiteMeshjavaBin Side 26 Avansert funksjonalitet Forskjellige dekoratorspråk JSP + taglibs Velocity Freemarker DecoratorMapper interface URL /* Printable Browser spesifikk Roboter etc. 12 innebygde, enkelt å skrive egen PageDecoratorMapper FrameSetDecoratorMapper PrintableDecoratorMapper FileDecoratorMapper ConfigDecoratorMapper Default Chain of Responsibility
SiteMeshjavaBin Side 27 Eksempel – PageDecoratorMapping Sider kan selv velge dekorator Fint for småting, “portlet”/paneler/forms etc. Skummelt å bruke for mye? Knytter sider opp mot SiteMesh Bra i dekoratorer! Eksempel:
SiteMeshjavaBin Side 28 Eksempel – PageDecoratorMapping Enkel portlet funksjonalitet? Ligner på Tiles?
SiteMeshjavaBin Side 29 Diverse StaticMesh – port (stable) ISAPI C++ port (unstable) PHP-Mesh Website: sitemesh-blank.war – fin å starte prosjekt med sitemesh-example.war – enkle og oversiktlige eksempel sitemesh jar – kun SiteMesh OpenSymphony – Mange bra OS produkter (WebWork, XWork, OSWorkflow, OSCache ++) Samarbeid med Atlassian (JIRA & Confluence)
SiteMeshjavaBin Side 30 Q & A Spørsmål? Ta gjerne kontakt: Takk for meg!