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-приложением. Он также может помочь в создании большого веб-приложения, поскольку это довольно просто и быстро.