Краткий обзор


Ключевой особенностью архитектуры Rilio Framework является простота и минимализм. В состав библиотеки входят всего 3 класса: RilioServlet, Page и Control.

RilioServlet


RilioServlet - основной сервлет web приложения, выступающий в роли диспетчера запросов.
Параметры инициализации сервлета хранятся в файле /WEB-INF/web.xml:
<web-app>
<servlet>
<servlet-name>RilioServlet</servlet-name>
<servlet-class>
net.rilio.framework.RilioServlet

</servlet-class>
<init-param>
<param-name>mode</param-name>
<param-value>release</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>RilioServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
encoding - кодировка по умолчанию для всех страниц (default: "UTF-8")
mode - {"debug" или "release"} (default: "release")

RilioServlet использует Velocity в качестве шаблонного движка. Параметры инициализации Velocity можно хранить в файле /WEB-INF/velocity.properties, например:
#velocity properties 
velocimacro.library.autoreload=true
velocimacro.library=/WEB_INF/VM_global_library.vm
При старте RilioServlet загружает соответствия между web-адресами и именами классов-обработчиков запроса из файла /WEB-INF/rilio.properties:
#rilio properties 
sample=net.rilio.framework.sample.SamplePage
В этом случае все запросы по относительному адресу /sample будут обрабатываться экземпляром класса net.rilio.framework.sample.SamplePage.

Page


Класс Page отвечает за отображение web-страницы в целом.

RilioServlet автоматически создает экземпляр объекта соответствующего подкласса Page, как это определено в /WEB-INF/rilio.properties.

Класс Page формирует HTML документ путем слияния шаблона (Velocity template) и контекста (Velocity context). Контекст представляет собой контейнер данных, который может пересылаться между Java-уровнем (модель данных) и уровнем шаблона (представление).

Класс VelocityContext очень похож на обычный Java класс Hashtable.

Шаблон в Rilio Framework является HTML страницей с включениями элементов VTL (Velocity Template Language - язык шаблонов Velocity, см. Velocity guide). После слияния шаблона и контекста, экземпляр класса Page производит разбор HTML документа с помощью DOM-парсера и формирует объект класса Document .

В общем случае, при запросах GET/POST в классе Page возникает следующая последовательность вызовов:

  1. создание экземпляра (или чтение из кеша).
  2. onInit() - метод инициализации.
  3. слияние шаблона и контекста.
  4. parse() - разбор и построение объекта Document.
  5. writeHTML() -генерация окончательного HTML-текста.

Control


Класс Control является представлением одиночного HTML элемента. Он обеспечивает простой способ создания и управления элементами страницы. Для этого каждый HTML элемент, управляемый объектом класса Control, должен иметь уникальный атрибут id.

Rilio Framework позволяет писать на Java обработчики для событий, возникающих в HTML элементах.
Например:

private Control desc=getControl("description");
private Control button=getControl("btRun"); button.setEvent("onclick", "btClick"); ... public void btClick(String id){ desc.setHTML("Hello world!"); }
<input type="button" id="btRun" value="Say Hello">

<p/>  
<div id="description">...</div>

Таким образом мы изменяем содержимое элемента <div>.

RilioServlet использует стандартные имена событий, определенные в DHTML ("onclick", "onchange" и т.д.).

Обработчик события должен быть public-методом класса - потомка класса Page. Единственный строковый параметр этого метода - аттрибут id элемента, вызвавшего событие.