Гобелен Apache - Архитектура

Tapestry старается максимально использовать доступные возможности Java. Например, все страницы Tapestry - это просто POJO. Он не требует никаких настраиваемых интерфейсов или базового класса для написания приложения. Вместо этого он использует аннотацию (облегченный вариант для расширения функциональности класса Java) для предоставления функций. Он основан на проверенных в бояхJava Servlet APIи реализован как фильтр сервлетов. Он обеспечивает новое измерение веб-приложения, а его программирование является довольно простым, гибким, понятным и надежным.

Рабочий процесс

Давайте обсудим последовательность действий, происходящих при запросе страницы гобелена.

Step 1 - The Java Servletполучает запрос страницы. Этот сервлет Java настроен таким образом, что входящий запрос будет перенаправлен на гобелен. Конфигурация выполняется вweb.xmlкак указано в следующей программе. Тег Filter and Filter Mapping перенаправляет все запросы в Tapestry Filter .

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
   "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
   <display-name>My Tapestry Application</display-name> 
   <context-param> 
      <param-name>tapestry.app-package</param-name> 
      <param-value>org.example.myapp</param-value> 
   </context-param> 
   <filter> 
      <filter-name>app</filter-name> 
      <filter-class>org.apache.tapestry5.TapestryFilter</filter-class> 
   </filter> 
   <filter-mapping> 
      <filter-name>app</filter-name> 
      <url-pattern>/*</url-pattern> 
   </filter-mapping> 
</web-app>

Step 2 - The Tapestry Filter называет HttpServletRequestHandler Служба своим Service() метод.

Step 3 - HttpServletRequestHandler сохраняет запрос и ответ в RequestGlobals. Он также обертывает запрос и ответ как объект запроса и ответа и отправляет его в RequestHandler.

Step 4 - The RequestHandler это абстракция поверх HttpServletRequestсервлетного API. Некоторые характерные черты гобелена выполнены вRequestHandlerраздел. Возможности гобелена можно расширить, написав фильтр в RequestHandler. RequestHandler предоставляет несколько встроенных фильтров, которые включают:

  • CheckForUpdates Filter- Отвечает за перезагрузку живого класса. Этот фильтр проверяет классы java на наличие изменений и при необходимости обновляет приложение.

  • Localization Filter - Определите местонахождение пользователя и обеспечьте поддержку локализации приложения.

  • StaticFiles Filter- Определите статический запрос и прервет процесс. Как только процесс прерывается, Java Servlet берет на себя управление и обрабатывает запрос.

  • Error Filter - Отлавливает неперехваченное исключение и представляет страницу отчета об исключении.

RequestHandler также изменяет и сохраняет запрос и ответ в RequestQlobals и вызывает службу MasterDispatcher.

Step 5 - The MasterDispatcherотвечает за отрисовку страницы путем вызова нескольких диспетчеров в определенном порядке. Четыре основных диспетчера, вызываемых MasterDispatcher, следующие:

  • RootPath Dispatcher - Он распознает корневой путь «/» запроса и отображает то же, что и начальная страница.

  • Asset Dispatcher - Он распознал запрос актива (активы Java), проверив шаблон URL-адреса / assets /, и отправил запрошенные активы в виде байтовых потоков.

  • PageRender Dispatcher- Основная часть операций с гобеленом выполняется в PageRender Dispatcher и в следующем диспетчере Component Dispatcher. Этот диспетчер распознает конкретную страницу этого запроса и контекст ее активации (дополнительная информация). Затем он отображает эту конкретную страницу и отправляет ее клиенту. Например, если URL-адрес запроса - / product / 12123434, диспетчер проверит, доступен ли какой-либо класс с именем product / 12123434. Если он найден, он вызывает класс product / 12123434, генерирует ответ и отправляет его клиенту. Если нет, он проверяет класс продукта. Если он найден, он вызывает класс продукта с дополнительной информацией 121234434, генерирует ответ и отправляет его клиенту. Эта дополнительная информация называется контекстом активации. Если класс не найден, он просто перенаправляет запрос диспетчеру компонентов.

  • Component Dispatcher- Диспетчер компонентов сопоставляет URL-адрес страницы с шаблоном - / <class_name> / <component_id>: <event_type> / <activation_context>. Например, / product / grid: sort / asc представляет класс продукта, компонент сетки, тип сортировки и контекст активации asc. Здесь event_type является необязательным, и если он не указан, будет запущено действие типа события по умолчанию. Обычно диспетчер компонентов отправляет клиенту перенаправление. В большинстве случаев перенаправление будет соответствовать диспетчеру PageRender Dispatcher в следующем запросе, и клиенту будет отправлен правильный ответ.