В этой главе мы подробно обсудим несколько расширенных функций Apache Tapestry.
Инверсия контроля
Tapestry предоставляет встроенную библиотеку Inversion of Control. Гобелен глубоко интегрирован в IoC и использует IoC для всех своих функций. Конфигурация IoC на основе Tapestry основана на самой Java, а не на XML, как и многие другие контейнеры IoC. Модули на основе Tapestry IoC упакованы в файл JAR и просто помещены в путь к классам с нулевой конфигурацией. Использование гобеленов IoC основано на легкости, что означает —
-
Небольшие интерфейсы двух или трех методов.
-
Небольшие методы с двумя или тремя параметрами.
-
Анонимное общение через события, а не явные вызовы методов.
Небольшие интерфейсы двух или трех методов.
Небольшие методы с двумя или тремя параметрами.
Анонимное общение через события, а не явные вызовы методов.
Модули
Модуль — это способ расширить функциональность приложения Tapestry. Гобелен имеет как встроенные модули, так и большое количество сторонних модулей. Hibernate — один из самых полезных и очень полезных модулей, предоставляемых Tapestry. Он также имеет модули, интегрирующие JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON и т. Д. Некоторые из известных сторонних модулей:
- Гобелен-Cayenne
- Tapestry5-GoogleAnalytics
- Банда гобеленов 5 — Tapestry5-HighCharts
- Банда гобеленов 5 — Tapestry5-jqPlot
- Банда гобеленов 5 — Гобелен5-Jquery
- Банда гобеленов 5 — Tapestry5-Jquery-мобильный
- Банда гобеленов 5 — Гобелен5-портлет
Исключения во время выполнения
Одна из лучших функций гобелена — подробный отчет об ошибках . Tapestry помогает разработчику, предоставляя самые современные отчеты об исключениях. Отчет об исключении гобеленов представляет собой простой HTML с подробной информацией. Любой может легко понять отчет. Гобелен показывает ошибку в HTML, а также сохраняет исключение в виде обычного текста с указанием даты и времени возникновения исключения. Это поможет разработчику проверить исключение и в производственной среде. Разработчик может быть уверен в исправлении любых проблем, таких как сломанные шаблоны, неожиданные значения NULL, непревзойденный запрос и т. Д.,
Живой класс и перезагрузка шаблона
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 предоставляет класс PageTester для тестирования приложения. Это действует как браузер и контейнер сервлета. Он отображает страницу без браузера на самой стороне сервера, и итоговый документ можно проверить на правильность отображения. Рассмотрим простую страницу Hello , которая отображает hello, а 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 Instance.
Один из примеров комплексного тестирования выглядит следующим образом:
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 . На панели инструментов отображаются все страницы, службы и библиотеки компонентов, доступные в приложении.
Сжатие ответа
Tapestry автоматически сжимает ответ, используя сжатие GZIP, и передает его клиенту. Эта функция уменьшит сетевой трафик и поможет быстрее доставить страницу. Сжатие можно настроить с помощью символа tapestry.min-gzip-size в AppModule.java. Значение по умолчанию составляет 100 байт. Гобелен сжимает ответ, как только размер ответа пересекает 100 байтов.
Безопасность
Tapestry предоставляет множество возможностей для защиты приложения от известных уязвимостей в веб-приложении. Некоторые из этих вариантов перечислены ниже —
-
HTTPS — страницы гобеленов могут быть помечены @Secure, чтобы сделать их защищенной и доступными только по протоколу https .
-
Контроль доступа к странице — управление страницей, доступ к которой имеет только определенный пользователь.
-
Страница, занесенная в белый список — страницы гобеленов могут быть аннотированы @WhitelistAccessOnly, чтобы сделать их доступными только через локальный хост .
-
Безопасность активов — Под гобеленом доступны только определенные типы файлов. Другие могут быть доступны только при наличии хеша MD5 файла.
-
Дата сериализованного объекта — Tapestry интегрирует HMAC в сериализованные данные объекта Java и отправляет их клиенту, чтобы избежать фальсификации сообщений.
-
Подделка межсайтовых запросов — Tapestry предоставляет сторонний модуль, называемый tapestry-csrf-protection, для предотвращения любых CSRF-атак.
-
Интеграция структуры безопасности — Tapestry не блокируется в одной реализации аутентификации / авторизации. Гобелен может быть интегрирован с любой популярной платформой аутентификации.
HTTPS — страницы гобеленов могут быть помечены @Secure, чтобы сделать их защищенной и доступными только по протоколу https .
Контроль доступа к странице — управление страницей, доступ к которой имеет только определенный пользователь.
Страница, занесенная в белый список — страницы гобеленов могут быть аннотированы @WhitelistAccessOnly, чтобы сделать их доступными только через локальный хост .
Безопасность активов — Под гобеленом доступны только определенные типы файлов. Другие могут быть доступны только при наличии хеша MD5 файла.
Дата сериализованного объекта — Tapestry интегрирует HMAC в сериализованные данные объекта Java и отправляет их клиенту, чтобы избежать фальсификации сообщений.
Подделка межсайтовых запросов — Tapestry предоставляет сторонний модуль, называемый tapestry-csrf-protection, для предотвращения любых CSRF-атак.
Интеграция структуры безопасности — Tapestry не блокируется в одной реализации аутентификации / авторизации. Гобелен может быть интегрирован с любой популярной платформой аутентификации.
логирование
Tapestry предоставляет обширную поддержку для регистрации, автоматической записи прогресса приложения во время его работы. Tapestry использует библиотеку журналов Java де-факто, SLF4J . Аннотация @Log может быть в любом компонентном методе для создания входа и выхода метода, а также возможного исключения. Кроме того, предоставленный Tapestry объект logger может быть внедрен в любой компонент с помощью аннотации @Inject, как показано ниже —
public class MyPage { @Inject private Logger logger; // . . . void onSuccessFromForm() { logger.info("Changes saved successfully"); } @Log void onValidateFromForm() { // logic } }
Наконец, теперь мы можем сказать, что Apache Tapestry предлагает лучшие способы создания кратких, масштабируемых, поддерживаемых, надежных приложений с поддержкой Ajax. Гобелен может быть интегрирован с любым сторонним Java-приложением. Это также может помочь в создании большого веб-приложения, поскольку оно довольно простое и быстрое.