Apache Tapestry - Zaawansowane funkcje
W tym rozdziale omówimy szczegółowo kilka zaawansowanych funkcji Apache Tapestry.
Odwrócenie sterowania
Tapestry zapewnia wbudowaną bibliotekę Inversion of Control. Tapestry jest głęboko zintegrowany z IoC i wykorzystuje IoC we wszystkich swoich funkcjach. Konfiguracja Tapestry IoC jest oparta na samej Javie zamiast na XML, jak wiele innych kontenerów IoC. Moduły oparte na Tapestry IoC są pakowane do pliku JAR i po prostu umieszczane w ścieżce klas bez konfiguracji. Zastosowanie Tapestry IoC opiera się na lekkości, co oznacza -
Małe interfejsy z dwiema lub trzema metodami.
Małe metody z dwoma lub trzema parametrami.
Anonimowa komunikacja za pośrednictwem zdarzeń, a nie jawne wywołania metod.
Moduły
Moduł to sposób na rozszerzenie funkcjonalności aplikacji Tapestry. Tapestry ma zarówno wbudowane moduły, jak i dużą liczbę modułów innych firm. Hibernate jest jednym z gorących i bardzo przydatnych modułów dostarczonych przez Tapestry. Zawiera również moduły integrujące JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON itp. Niektóre z godnych uwagi modułów innych firm to -
- 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
Wyjątki w czasie wykonywania
Jedną z najlepszych cech gobelinu jest Detailed Error Reporting. Tapestry pomaga programiście, zapewniając najnowocześniejsze raportowanie wyjątków. Raport wyjątków Tapestry to prosty HTML ze szczegółowymi informacjami. Każdy może łatwo zrozumieć raport. Tapestry pokazuje błąd w HTML, a także zapisuje wyjątek w postaci zwykłego tekstu z datą i godziną wystąpienia wyjątku. Pomoże to deweloperowi sprawdzić wyjątek również w środowisku produkcyjnym. Deweloper może mieć pewność, że naprawi wszelkie problemy, takie jak zepsute szablony, nieoczekiwane wartości null, niedopasowane żądania itp.
Ponowne ładowanie klas i szablonów na żywo
Tapestry automatycznie przeładuje szablony i klasy po modyfikacji. Ta funkcja umożliwia natychmiastowe odzwierciedlenie zmian aplikacji bez przechodzenia przez cykl kompilacji i testowania. Ponadto ta funkcja znacznie poprawia wydajność tworzenia aplikacji.
Rozważmy, że pakiet główny aplikacji to org.example.myfirstapp. Następnie klasy w poniższych ścieżkach są skanowane w celu ponownego załadowania.
- org.example.myfirstapp.pages
- org.example.myfirstapp.components
- org.example.myfirstapp.mixins
- org.example.myfirstapp.base
- org.example.myfirstapp.services
Przeładowywanie klas na żywo można wyłączyć, ustawiając tryb produkcyjny na true w AppModule.java.
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
Testów jednostkowych
Testowanie jednostkowe to technika, za pomocą której testowane są poszczególne strony i komponenty. Tapestry zapewnia łatwe opcje jednostkowego testowania stron i komponentów.
Testowanie jednostkowe strony: Tapestry zapewnia klasę PageTesteraby przetestować aplikację. Działa zarówno jako przeglądarka, jak i kontener serwletów. Renderuje stronę bez przeglądarki po stronie serwera, a wynikowy dokument można sprawdzić pod kątem prawidłowego renderowania. Rozważ prostą stronęHello, który renderuje hello, a tekst hello jest zawarty w elemencie HTML o identyfikatorze hello_id. Aby przetestować tę funkcję, możemy użyć PageTestera, jak pokazano poniżej -
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");
}
}
PageTester zapewnia również opcję dołączania informacji kontekstowych, przesyłania formularzy, nawigacji po łączach itp. Oprócz renderowania strony.
Testowanie zintegrowane
Zintegrowane testowanie pomaga przetestować aplikację jako moduł zamiast sprawdzać poszczególne strony, jak w przypadku testów jednostkowych. W testowaniu zintegrowanym wiele modułów może być testowanych razem jako całość. Tapestry udostępnia małą bibliotekę o nazwieTapestry Test Utilitieszrobić zintegrowane testy. Ta biblioteka integruje się z narzędziem testowym Selenium do przeprowadzania testów. Biblioteka udostępnia klasę bazowąSeleniumTestCase, który uruchamia i zarządza serwerem Selenium, klientem Selenium i instancją Jetty.
Jeden z przykładów testów zintegrowanych jest następujący -
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");
}
}
Pulpit programistyczny
Pulpit programistyczny to domyślna strona używana do identyfikowania / rozwiązywania problemów w aplikacji. Pulpit nawigacyjny jest dostępny za pośrednictwem adresu URLhttp://localhost:8080/myfirstapp/core/t5dashboard. Pulpit pokazuje wszystkie strony, usługi i biblioteki komponentów dostępne w aplikacji.
Kompresja odpowiedzi
Tapestry automatycznie kompresuje odpowiedź za pomocą GZIP compressioni przesyłaj strumieniowo do klienta. Ta funkcja zmniejszy ruch w sieci i przyspieszy wyświetlanie strony. Kompresję można skonfigurować za pomocą symbolutapestry.min-gzip-sizew AppModule.java. Wartość domyślna to 100 bajtów. Tapestry skompresuje odpowiedź, gdy rozmiar odpowiedzi przekroczy 100 bajtów.
Bezpieczeństwo
Tapestry zapewnia wiele opcji zabezpieczania aplikacji przed znanymi lukami w zabezpieczeniach aplikacji internetowej. Niektóre z tych opcji są wymienione poniżej -
HTTPS - Strony z gobelinami można opatrzyć adnotacjami @Secure aby była bezpieczną stroną i dostępną dla https protocol tylko.
Page access control - Kontrolowanie dostępu do strony tylko dla określonego użytkownika.
White-Listed Page - Strony z gobelinem mogą być opatrzone adnotacją @WhitelistAccessOnly aby był dostępny tylko za pośrednictwem localhost.
Asset Security- Pod tapestry dostępne są tylko określone typy plików. Dostęp do innych można uzyskać tylko wtedy, gdy plikMD5 hash pliku.
Serialized Object Date - Tapestry integruje HMAC z zserializowanymi danymi obiektu Java i wysyła je do klienta, aby uniknąć manipulacji wiadomości.
Cross Site Request Forgery- Tapestry zapewnia 3 rd modułu partia o nazwie gobelin-CSRF-ochrony, aby zapobiec atakom CSRF żadnych.
Security Framework integration- Tapestry nie ogranicza się do pojedynczej implementacji uwierzytelniania / autoryzacji. Tapestry można zintegrować z dowolną popularną platformą uwierzytelniania.
Logowanie
Tapestry zapewnia szerokie wsparcie dla logowania, automatycznego rejestrowania postępu działania aplikacji. Tapestry używa de facto biblioteki logów Java,SLF4J. Adnotacja@Logmoże znajdować się w dowolnej metodzie składnika, aby wyemitować wejście i wyjście metody oraz ewentualny wyjątek. Ponadto obiekt rejestratora dostarczony przez Tapestry można wstrzyknąć do dowolnego komponentu przy użyciu@Inject adnotacja, jak pokazano poniżej -
public class MyPage {
@Inject
private Logger logger;
// . . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
// logic
}
}
Wreszcie, możemy teraz powiedzieć, że Apache Tapestry zapewnia najlepsze sposoby tworzenia zwięzłych, skalowalnych, łatwych w utrzymaniu, niezawodnych i obsługujących technologię Ajax aplikacji. Tapestry można zintegrować z dowolną aplikacją Java innej firmy. Może również pomóc w tworzeniu dużej aplikacji internetowej, ponieważ jest dość łatwy i szybki.