Учебники

Apache Tapestry — Архитектура

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

Workflow

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

Workflow

Шаг 1Сервлет Java получает запрос страницы. Этот сервлет Java настроен таким образом, что входящий запрос будет перенаправлен на гобелен. Конфигурация выполняется в файле web.xml, как указано в следующей программе. Filter и Filter Mapping tag перенаправляет весь запрос в 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> 

Шаг 2Фильтр Tapestry вызывает сервис HttpServletRequestHandler с помощью метода Service () .

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

Шаг 4RequestHandler — это абстракция поверх HttpServletRequest Servlet API. Некоторые из характерных особенностей гобелена сделаны в разделе RequestHandler . Функцию гобелена можно расширить, написав фильтр в RequestHandler. RequestHandler предоставляет несколько встроенных фильтров, которые включают в себя:

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

  • Фильтр локализации — определяет местоположение пользователя и обеспечивает поддержку локализации для приложения.

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

  • Фильтр ошибок — ловит необнаруженное исключение и представляет страницу отчета об исключении.

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

Фильтр локализации — определяет местоположение пользователя и обеспечивает поддержку локализации для приложения.

Фильтр StaticFiles — определяет статический запрос и прерывает процесс. Как только процесс прерван, сервлет Java берет на себя управление и обрабатывает запрос.

Фильтр ошибок — ловит необнаруженное исключение и представляет страницу отчета об исключении.

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

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

RootPath Dispatcher — распознает корневой путь «/» запроса и отображает его так же, как стартовая страница.

Диспетчер активов — он распознал запрос актива (актива Java), проверив шаблон URL / assets / и отправил запрошенные активы в виде потоков байтов.

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

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