Introduksjon til Apache Tapestry
1. Oversikt
I dag, fra sosiale nettverk til bank, helsetjenester til offentlige tjenester, er alle aktiviteter tilgjengelige online. Derfor stoler de sterkt på webapplikasjoner.
En webapplikasjon gjør det mulig for brukere å konsumere / nyte de elektroniske tjenestene som tilbys av et selskap. Samtidig fungerer det som et grensesnitt til backend-programvaren.
I denne innledende opplæringen vil vi utforske Apache Tapestry web framework og lage en enkel webapplikasjon ved hjelp av de grunnleggende funksjonene den gir.
2. Apache Tapestry
Apache Tapestry er et komponentbasert rammeverk for å bygge skalerbare webapplikasjoner.
Den følger konvensjon-over-konfigurasjon paradigme og bruker merknader og navnekonvensjoner for konfigurasjoner.
Alle komponentene er enkle POJOer. Samtidig er de utviklet fra bunnen av og har ingen avhengigheter av andre biblioteker.
Sammen med Ajax-støtte, har Tapestry også gode rapporteringsfunksjoner for unntak. Det gir også et omfattende bibliotek med innebygde vanlige komponenter.
Blant andre flotte funksjoner er en fremtredende den varme omlastingen av koden. Derfor, ved å bruke denne funksjonen, kan vi se endringene umiddelbart i utviklingsmiljøet.
3. Oppsett
Apache Tapestry krever et enkelt sett med verktøy for å lage en webapplikasjon:
- Java 1.6 eller nyere
- Byggeverktøy (Maven eller Gradle)
- IDE (formørkelse eller IntelliJ)
- Applikasjonsserver (Tomcat eller brygge)
I denne opplæringen bruker vi kombinasjonen av Java 8, Maven, Eclipse og Jetty Server.
For å sette opp det siste Apache Tapestry-prosjektet, bruker vi Maven-arketypen og følger instruksjonene i den offisielle dokumentasjonen:
$ mvn arketype: generer -DarchetypeCatalog = // tapestry.apache.org
Eller hvis vi har et eksisterende prosjekt, kan vi ganske enkelt legge til Maven-avhengigheten til tapetkjerne i pom.xml:
org.apache.tapestry tapetry-core 5.4.5
Når vi er klare med oppsettet, kan vi starte applikasjonen apache-tapet av følgende Maven-kommando:
$ mvn brygge: løp
Som standard vil appen være tilgjengelig kl localhost: 8080 / apache-tapestry:
4. Prosjektstruktur
La oss utforske prosjektoppsettet opprettet av Apache Tapestry:
Vi kan se en Maven-lignende prosjektstruktur, sammen med noen få pakker basert på konvensjoner.
Java-klassene er plassert i src / main / java og kategorisert som komponenter, sider, og tjenester.
Like måte, src / main / resources ha malene våre (ligner på HTML-filer) - disse har .tml Utvidelse.
For hver Java-klasse plassert under komponenter og sider kataloger, bør det opprettes en malfil med samme navn. De src / main / webapp katalog inneholder ressurser som bilder, stilark og JavaScript-filer. På samme måte plasseres testfiler i src / test. Siste, src / nettsted vil inneholde dokumentasjonsfilene. For en bedre ide, la oss ta en titt på prosjektstrukturen som ble åpnet i Eclipse IDE: La oss diskutere noen få praktiske merknader levert av Apache Tapestry for daglig bruk. Fremover bruker vi disse kommentarene i implementeringene våre. De @Injiser kommentar er tilgjengelig i org.apache.tapestry5.ioc.annotasjoner pakken og gir en enkel måte å injisere avhengigheter i Java-klasser. Denne kommentaren er ganske praktisk å injisere en eiendel, blokk, ressurs og tjeneste. Tilgjengelig i org.apache.tapestry5.annotasjoner pakken, den @InjectPage kommentar tillater oss å injisere en side i en annen komponent. Dessuten er den injiserte siden alltid en skrivebeskyttet eiendom. Tilsvarende @InjectComponent kommentar lar oss injisere en komponent som er definert i malen. De @Logg kommentar er tilgjengelig i org.apache.tapestry5.annotasjoner pakke og er praktisk for å aktivere DEBUG-nivålogging på hvilken som helst metode. Den logger metodeinngang og utgang, sammen med parameterverdier. Tilgjengelig i org.apache.tapestry5.annotasjoner pakken, den @Eiendom merknad markerer et felt som en eiendom. Samtidig oppretter den automatisk getters og settere for eiendommen. Tilsvarende @Parameter merknad angir at et felt er en komponentparameter. Så vi er klare til å utforske de grunnleggende funksjonene i rammeverket. La oss lage et nytt Hjem side i appen vår. Først definerer vi en Java-klasse Hjem i sider katalog i src / main / java: Deretter lager vi et tilsvarende Hjem.tml mal i sider katalog under src / main / resources. En fil med filtypen .tml (Tapestry Markup Language) ligner på en HTML / XHTML-fil med XML-markering levert av Apache Tapestry. La oss for eksempel se på Hjem.tml mal: Voila! Bare ved å starte Jetty-serveren på nytt, får vi tilgang til Hjem side kl localhost: 8080 / apache-tapetry / home: La oss undersøke hvordan du gjengir en eiendom på Hjem side. For dette legger vi til en eiendom og en getter-metode i Hjem klasse: Å gjengi appName eiendom på Hjem side, kan vi ganske enkelt bruke $ {appName}. På samme måte kan vi skrive $ {currentTime} for å få tilgang til getCurrentTime metode fra siden. Apache Tapestry gir integrert lokaliseringsstøtte. I henhold til konvensjonen holder en sidenavnegenskapsfil listen over alle de lokale meldingene som skal gjengis på siden. For eksempel vil vi lage en hjem. eiendommer filen i sider katalog for Hjem side med en lokal melding: Meldingsegenskapene er forskjellige fra Java-egenskapene. Av samme grunn, nøkkelnavnet med beskjed prefikset brukes til å gjengi en meldingsegenskap - for eksempel $ {melding: introMsg}. La oss definere en grunnleggende layoutkomponent ved å lage Layout.java klasse. Vi beholder filen i komponenter katalog i src / main / java: Her, den tittel egenskapen er merket som obligatorisk, og standard prefikset for binding er satt som bokstavelig String. Deretter skriver vi en tilsvarende malfil Layout.tml i komponenter katalog i src / main / resources: © Din bedrift La oss nå bruke oppsett på hjem side: Merk at navneområdet brukes til å identifisere elementene (t: type og t: kropp) levert av Apache Tapestry. Samtidig inneholder navneområdet også komponenter og attributter. Her, den t: type vil stille inn oppsett på hjem side. Og t: kropp elementet vil sette inn innholdet på siden. La oss ta en titt på Hjem side med oppsettet: La oss lage en Logg Inn side med skjema for å tillate brukere å logge på. Som allerede utforsket, oppretter vi først en Java-klasse Logg Inn: Her har vi definert to egenskaper - e-post og passord. Vi har også injisert en Skjema komponent for pålogging. La oss deretter lage en tilsvarende mal login.tml: Nå kan vi få tilgang til Logg Inn side kl localhost: 8080 / apache-tapestry / login: Apache Tapestry tilbyr noen få innebygde metoder for skjemavalidering. Det gir også måter å håndtere suksessen eller mislykkingen av skjemainnleveringen. Den innebygde metoden følger konvensjonen av hendelsen og komponentnavnet. For eksempel metoden onValidationFromLogin vil validere Logg Inn komponent. Likeledes metoder som onSuccessFromLogin og onFailureFromLogin er henholdsvis for suksess og fiasko. Så la oss legge til disse innebygde metodene til Logg Inn klasse: Formvalidering er ufullstendig uten riktige varsler. For ikke å nevne, rammeverket har også innebygd støtte for varselmeldinger. For dette vil vi først injisere forekomsten av AlertManager i Logg Inn klasse for å administrere varslene. Bytt deretter ut utskrift uttalelser i eksisterende metoder med varselmeldingene: La oss se varslene i aksjon når påloggingen mislykkes: Så langt har vi utforsket etableringen av en enkel hjem side med skjema. Samtidig har vi sett valideringene og støtten for varselmeldinger. La oss deretter utforske Apache Tapestrys innebygde støtte for Ajax. Først injiserer vi forekomsten av AjaxResponseRenderer og Blokkere komponent i Hjem klasse. Deretter lager vi en metode onCallAjax for behandling av Ajax-samtalen: Vi må også gjøre noen endringer i vår Hjem.tml. Først legger vi til eventLink å påkalle onCallAjax metode. Deretter legger vi til en sone element med id ajaxZone for å gjengi Ajax-responsen. Til slutt må vi ha en blokkomponent som skal injiseres i Hjem klasse og gjengitt som Ajax-svar: Ring Ajax Nåværende tid er: $ {currentTime} La oss ta en titt på det oppdaterte hjem side: Deretter kan vi klikke på Call Ajax-knappen og se ajaxResponseRenderer i aksjon: For å aktivere den innebygde loggfunksjonen, forekomsten av Logger kreves for å bli injisert. Deretter kan vi bruke den til å logge på alle nivåer som TRACE, DEBUG og INFO. Så la oss gjøre de nødvendige endringene i Hjem klasse: Nå, når vi klikker på Ring Ajax-knappen, logger vil logge på INFO-nivå: I denne artikkelen har vi utforsket Apache Tapestry web framework. Til å begynne med har vi opprettet en hurtigstartapplikasjon og lagt til en Hjem side ved hjelp av grunnleggende funksjoner i Apache Tapestry, som komponenter, sider, og maler. Deretter har vi undersøkt noen praktiske merknader levert av Apache Tapestry for å konfigurere en eiendom og komponent / sideinjeksjon. Sist, har vi utforsket den innebygde Ajax- og loggstøtten som tilbys av rammeverket. Som vanlig er alle kodeimplementeringene tilgjengelige på GitHub.5. Kommentarer
5.1. @Injiser
5.2. @InjectPage
5.3. @InjectComponent
5.4. @Logg
5.5. @Eiendom
5.6. @Parameter
6. Side
offentlig klasse Hjem {}
6.1. Mal
apache-tapestry Hjem
6.2. Eiendom
@Property private String appName = "apache-tapestry"; public Date getCurrentTime () {return new Date (); }
6.3. Lokalisering
introMsg = Velkommen til Apache Tapestry Tutorial
6.4. Oppsettkomponent
public class Layout {@Property @Parameter (required = true, defaultPrefix = BindingConstants.LITERAL) private String title; }
$ {title}
$ {melding: introMsg}
$ {currentTime}
7. Skjema
offentlig klasse Innlogging {// ... @InjectComponent private Form login; @Property private streng e-post; @Property private strengpassord; }
Vennligst logg inn
8. Validering
offentlig klasse Innlogging {// ... ugyldig påValidateFromLogin () {if (email == null) System.out.println ("Email is null); if (password == null) System.out.println (" Password is null ); } Objekt onSuccessFromLogin () {System.out.println ("Velkommen! Pålogging vellykket"); returner Hjem.klasse; } ugyldig onFailureFromLogin () {System.out.println ("Prøv igjen med riktig legitimasjon"); }}
9. Varsler
offentlig klasse Innlogging {// ... @Inject private AlertManager alertManager; ugyldig onValidateFromLogin () {if (email == null || passord == null) {alertManager.error ("E-post / passord er null"); login.recordError ("Validering mislyktes"); // innsendingsfeil på skjemaet}} Objekt onSuccessFromLogin () {alertManager.success ("Velkommen! Pålogging vellykket"); returner Hjem.klasse; } ugyldig onFailureFromLogin () {alertManager.error ("Prøv igjen med riktig legitimasjon"); }}
10. Ajax
offentlig klasse Hjem {// .... @Inject private AjaxResponseRenderer ajaxResponseRenderer; @Inject private Block ajaxBlock; @Log ugyldig onCallAjax () {ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}
Gjengitt gjennom Ajax
11. Logging
offentlig klasse Hjem {// ... @Inject private Logger logger; ugyldig onCallAjax () {logger.info ("Ajax call"); ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}
[INFO] -sider. Hjem Ajax-samtale
12. Konklusjon