Учебники

Apache Tapestry — Расширенные возможности

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