Apache Tapestry - Расширенные возможности
В этой главе мы подробно обсудим несколько расширенных функций Apache Tapestry.
Инверсия контроля
Tapestry предоставляет встроенную библиотеку Inversion of Control. Tapestry глубоко интегрирована в IoC и использует IoC для всех своих функций. Конфигурация Tapestry IoC основана на самой Java, а не на XML, как и многие другие контейнеры IoC. Модули на основе Tapestry IoC упаковываются в файл JAR и просто помещаются в путь к классам с нулевой конфигурацией. Использование Tapestry IoC основано на легкости, что означает -
Небольшие интерфейсы двух или трех методов.
Небольшие методы с двумя или тремя параметрами.
Анонимное общение через события, а не явные вызовы методов.
Модули
Модуль - это способ расширить функциональность приложения Tapestry. Tapestry имеет как встроенные модули, так и большое количество сторонних модулей. Hibernate - один из самых популярных и очень полезных модулей, предоставляемых Tapestry. Он также имеет модули, интегрирующие JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON и т. Д. Некоторые из известных сторонних модулей:
- Tapestry-Cayenne
- Tapestry5-googleanalytics
- Банда гобеленов 5 - Tapestry5-HighCharts
- Банда гобеленов 5 - Tapestry5-jqPlot
- Банда гобеленов 5 - Tapestry5-JQuery
- Банда гобеленов 5 - Tapestry5-JQuery-mobile
- Банда гобеленов 5 - Tapestry5-Portlet
Исключения времени выполнения
Одна из лучших особенностей гобелена - Detailed Error Reporting. Tapestry помогает разработчику, предоставляя современные отчеты об исключениях. Отчет об исключении гобеленов представляет собой простой HTML-код с подробной информацией. Каждый может легко понять отчет. Гобелен показывает ошибку в HTML, а также сохраняет исключение в виде обычного текста с указанием даты и времени возникновения исключения. Это также поможет разработчику проверить исключение в производственной среде. Разработчик может быть уверен в том, что исправит любые проблемы, такие как сломанные шаблоны, неожиданные нулевые значения, несогласованный запрос и т. Д.
Живой класс и перезагрузка шаблона
При изменении Tapestry автоматически перезагрузит шаблоны и классы. Эта функция позволяет мгновенно отражать изменения приложения без прохождения цикла сборки и тестирования. Кроме того, эта функция значительно повышает продуктивность разработки приложений.
Считайте, что корневой пакет приложения org.example.myfirstapp. Затем классы по следующим путям сканируются на предмет перезагрузки.
- org.example.myfirstapp.pages
- org.example.myfirstapp.components
- org.example.myfirstapp.mixins
- org.example.myfirstapp.base
- org.example.myfirstapp.services
Перезагрузку живого класса можно отключить, установив производственный режим на true в AppModule.java.
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
Модульное тестирование
Модульное тестирование - это метод, с помощью которого тестируются отдельные страницы и компоненты. Tapestry предоставляет простые варианты для страниц и компонентов модульного тестирования.
Модульное тестирование страницы: Tapestry предоставляет класс PageTesterдля тестирования приложения. Он действует как браузер и контейнер сервлета. Он отображает страницу без браузера на самой стороне сервера, и полученный документ можно проверить на правильность отображения. Рассмотрим простую страницуHello, который отображает приветствие, а текст приветствия заключен внутри элемента html с идентификатором hello_id. Чтобы протестировать эту функцию, мы можем использовать PageTester, как показано ниже -
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 также предоставляет возможность включать контекстную информацию, отправку формы, навигацию по ссылкам и т. Д. В дополнение к отображению страницы.
Комплексное тестирование
Интегрированное тестирование помогает тестировать приложение как модуль вместо проверки отдельных страниц, как при модульном тестировании. В интегрированном тестировании несколько модулей можно тестировать вместе как единое целое. Tapestry предоставляет небольшую библиотеку под названиемTapestry Test Utilitiesпровести комплексное тестирование. Эта библиотека интегрируется с инструментом тестирования Selenium для выполнения тестирования. Библиотека предоставляет базовый классSeleniumTestCase, который запускает и управляет сервером Selenium, клиентом Selenium и экземпляром Jetty.
Один из примеров интегрированного тестирования выглядит следующим образом -
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");
}
}
Панель развития
Панель инструментов разработки - это страница по умолчанию, которая используется для выявления / решения проблем в вашем приложении. Доступ к приборной панели осуществляется по URL-адресуhttp://localhost:8080/myfirstapp/core/t5dashboard. На панели управления отображаются все страницы, службы и библиотеки компонентов, доступные в приложении.
Сжатие ответа
Гобелен автоматически сжимает ответ, используя GZIP compressionи передать его клиенту. Эта функция снизит сетевой трафик и поможет ускорить доставку страницы. Сжатие можно настроить с помощью символаtapestry.min-gzip-sizeв AppModule.java. Значение по умолчанию - 100 байт. Tapestry сжимает ответ, когда размер ответа превышает 100 байт.
Безопасность
Tapestry предоставляет множество возможностей для защиты приложения от известных уязвимостей в веб-приложении. Некоторые из этих вариантов перечислены ниже -
HTTPS - Страницы гобелена могут быть аннотированы @Secure чтобы сделать страницу безопасной и доступной для https protocol только.
Page access control - Контроль доступа к странице только определенному пользователю.
White-Listed Page - Страницы гобелена могут быть аннотированы @WhitelistAccessOnly сделать его доступным только через localhost.
Asset Security- Под гобеленом доступны только определенные типы файлов. Другие доступны только тогда, когдаMD5 hash файла предоставляется.
Serialized Object Date - Tapestry интегрирует HMAC в сериализованные данные объекта Java и отправляет их клиенту, чтобы избежать подделки сообщения.
Cross Site Request Forgery- Гобелен обеспечивает 3 - й модуль партии под названием гобелен-CSRF-защиту для предотвращения любого CSRF атак.
Security Framework integration- Гобелен не привязан к одной реализации аутентификации / авторизации. Tapestry можно интегрировать с любой популярной платформой аутентификации.
логирование
Tapestry обеспечивает обширную поддержку ведения журнала, автоматической записи хода работы приложения во время его работы. Tapestry использует де-факто библиотеку ведения журналов Java,SLF4J. Аннотация@Logможет быть в любом методе компонента, чтобы генерировать вход и выход из метода, а также возможное исключение. Кроме того, объект регистратора, предоставленный Tapestry, можно внедрить в любой компонент с помощью@Inject аннотация, как показано ниже -
public class MyPage {
@Inject
private Logger logger;
// . . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
// logic
}
}
Наконец, теперь мы можем сказать, что Apache Tapestry предоставляет лучшие способы создания кратких, масштабируемых, поддерживаемых, надежных и поддерживающих Ajax приложений. Tapestry можно интегрировать с любым сторонним Java-приложением. Он также может помочь в создании большого веб-приложения, поскольку это довольно просто и быстро.