Apache Tapestry - Funzionalità avanzate
In questo capitolo, discuteremo in dettaglio alcune funzionalità avanzate di Apache Tapestry.
Inversione di controllo
Tapestry fornisce la libreria Inversion of Control incorporata. Tapestry è profondamente integrato in IoC e utilizza IoC per tutte le sue funzionalità. La configurazione di Tapestry IoC si basa su Java stesso invece che su XML come molti altri contenitori IoC. I moduli basati su Tapestry IoC sono impacchettati in un file JAR e lasciati semplicemente cadere nel classpath senza configurazione. L'utilizzo di Tapestry IoC si basa sulla leggerezza, il che significa:
Piccole interfacce di due o tre metodi.
Piccoli metodi con due o tre parametri.
Comunicazione anonima tramite eventi, piuttosto che invocazioni di metodi esplicite.
Moduli
Il modulo è un modo per estendere le funzionalità dell'applicazione Tapestry. Tapestry ha sia moduli incorporati che un gran numero di moduli di terze parti. Hibernate è uno dei moduli caldi e molto utili forniti da Tapestry. Ha anche moduli che integrano JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON, ecc. Alcuni dei notevoli moduli di terze parti sono:
- Tapestry-Cayenne
- Tapestry5-googleanalytics
- Gang of tapestry 5 - Tapestry5-HighCharts
- Gang of tapestry 5 - Tapestry5-jqPlot
- Gang of tapestry 5 - Tapestry5-Jquery
- Gang of tapestry 5 - Tapestry5-Jquery-mobile
- Gang of tapestry 5 - Tapestry5-Portlet
Eccezioni di runtime
Una delle migliori caratteristiche dell'arazzo è Detailed Error Reporting. Tapestry aiuta uno sviluppatore fornendo rapporti sulle eccezioni all'avanguardia. Il rapporto sulle eccezioni di Tapestry è un semplice HTML con informazioni dettagliate. Chiunque può facilmente capire il rapporto. Tapestry mostra l'errore in HTML e salva l'eccezione in un testo semplice con la data e l'ora in cui si è verificata l'eccezione. Ciò aiuterà lo sviluppatore a controllare l'eccezione anche nell'ambiente di produzione. Lo sviluppatore può rimanere sicuro di risolvere eventuali problemi come modelli non funzionanti, valori nulli imprevisti, richieste non corrispondenti, ecc.
Classe dal vivo e ricarica dei modelli
Tapestry ricaricherà automaticamente i modelli e le classi quando vengono modificati. Questa funzione consente la riflessione immediata delle modifiche dell'applicazione senza passare attraverso il ciclo di compilazione e test. Inoltre, questa funzione migliora notevolmente la produttività dello sviluppo dell'applicazione.
Considera che il pacchetto radice dell'applicazione è org.example.myfirstapp. Quindi, le classi nei seguenti percorsi vengono scansionate per essere ricaricate.
- org.example.myfirstapp.pages
- org.example.myfirstapp.components
- org.example.myfirstapp.mixins
- org.example.myfirstapp.base
- org.example.myfirstapp.services
Il ricaricamento della classe dal vivo può essere disabilitato impostando la modalità di produzione su true in AppModule.java.
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
Test unitario
Il test unitario è una tecnica con cui vengono testate singole pagine e componenti. Tapestry fornisce semplici opzioni per le pagine e i componenti di unit test.
Test unitario di una pagina: Tapestry fornisce una classe PageTesterper testare l'applicazione. Funziona sia come browser che come contenitore servlet. Rende la pagina senza il browser sul lato server stesso e il documento risultante può essere controllato per il rendering corretto. Considera una semplice paginaHello, che rende hello e il testo hello è racchiuso in un elemento html con id hello_id. Per testare questa funzione, possiamo utilizzare PageTester come mostrato di seguito:
public class PageTest extends Assert {
@Test
public void test1() {
Sring appPackage = "org.example.myfirstapp"; // package name
String appName = "App1"; // app name
PageTester tester = new PageTester(appPackage, appName, "src/main/webapp");
Document doc = tester.renderPage("Hello");
assertEquals(doc.getElementById("hello_id").getChildText(), "hello");
}
}
Il PageTester fornisce anche la possibilità di includere informazioni di contesto, invio di moduli, navigazione tramite link, ecc., Oltre al rendering della pagina.
Test integrato
Il test integrato aiuta a testare l'applicazione come un modulo invece di controllare le singole pagine come nel test unitario. Nel test integrato, più moduli possono essere testati insieme come un'unità. Tapestry fornisce una piccola libreria chiamataTapestry Test Utilitiesfare test integrati. Questa libreria si integra con lo strumento di test Selenium per eseguire il test. La libreria fornisce una classe baseSeleniumTestCase, che avvia e gestisce il server Selenium, il client Selenium e l'istanza Jetty.
Uno degli esempi di test integrato è il seguente:
import org.apache.tapestry5.test.SeleniumTestCase;
import org.testng.annotations.Test;
public class IntegrationTest extends SeleniumTestCase {
@Test
public void persist_entities() {
open("/persistitem");
assertEquals(getText("//span[@id='name']").length(), 0);
clickAndWait("link = create item");
assertText("//span[@id = 'name']", "name");
}
}
Dashboard di sviluppo
Il dashboard di sviluppo è la pagina predefinita che viene utilizzata per identificare / risolvere i problemi nella tua applicazione. Si accede al dashboard tramite l'URLhttp://localhost:8080/myfirstapp/core/t5dashboard. La dashboard mostra tutte le pagine, i servizi e le librerie di componenti disponibili nell'applicazione.
Compressione della risposta
Tapestry comprime automaticamente la risposta usando GZIP compressione trasmettilo al client. Questa funzione ridurrà il traffico di rete e faciliterà la consegna più rapida della pagina. La compressione può essere configurata utilizzando il simbolotapestry.min-gzip-sizein AppModule.java. Il valore predefinito è 100 byte. Tapestry comprimerà la risposta una volta che la dimensione della risposta supera i 100 byte.
Sicurezza
Tapestry fornisce molte opzioni per proteggere l'applicazione dalle vulnerabilità di sicurezza note nell'applicazione web. Alcune di queste opzioni sono elencate di seguito:
HTTPS - Le pagine degli arazzi possono essere annotate con @Secure per renderlo una pagina sicura e accessibile da https protocol solo.
Page access control - Controllo della pagina accessibile solo a un determinato utente.
White-Listed Page - Le pagine degli arazzi possono essere annotate con un file @WhitelistAccessOnly per renderlo accessibile solo tramite localhost.
Asset Security- Sotto arazzo, sono accessibili solo alcuni tipi di file. È possibile accedere ad altri solo quando il fileMD5 hash del file viene fornito.
Serialized Object Date - Tapestry integra un HMAC in dati di oggetti Java serializzati e li invia al client per evitare la manomissione del messaggio.
Cross Site Request Forgery- Tapestry fornisce un 3 ° modulo utente chiamato arazzo-CSRF-protezione per impedire eventuali attacchi CSRF.
Security Framework integration- Tapestry non si blocca in una singola implementazione di autenticazione / autorizzazione. Tapestry può essere integrato con qualsiasi framework di autenticazione popolare.
Registrazione
Tapestry fornisce un ampio supporto per la registrazione, la registrazione automatica dell'avanzamento dell'applicazione mentre viene eseguita. Tapestry utilizza la libreria di registrazione Java de facto,SLF4J. L'annotazione@Logpuò essere in qualsiasi metodo componente per emettere l'entrata e l'uscita del metodo e anche la possibile eccezione. Inoltre, l'oggetto logger fornito da Tapestry può essere iniettato in qualsiasi componente utilizzando l'estensione@Inject annotazione come mostrato di seguito -
public class MyPage {
@Inject
private Logger logger;
// . . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
// logic
}
}
Infine, ora possiamo dire che Apache Tapestry offre i modi migliori per creare applicazioni concise, scalabili, manutenibili, robuste e abilitate per Ajax. Tapestry può essere integrato con qualsiasi applicazione Java di terze parti. Può anche aiutare nella creazione di una grande applicazione web in quanto è abbastanza facile e veloce.