Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Уже неделю пишу веб-движок на Java для своего сайта shabarshin.com (с java-хостингом). Движок запускается сервлетом и может анализировать параметры переданные через POST или GET, обращаться к базам данных MySQL и парсить темплейты из файлов-шаблонов лежащих на сервере. Вот какие классы уже созданы и отлажены: WebDir.java - класс для представления доступа к файлам на сервере через объекты File WebModule.java - интерфейс абстрактных веб-модулей WebParam.java - класс параметров получаемых через POST или GET WebPrint.java - интерфейс обобщенного выходного потока WebSQL.java - класс доступа к базам данных MySQL WebStrings.java - класс индексируемого динамического списка строк Основной класс движка WebEngine.java (парсер для файлов-темплейтов) еще не доделан. После отладки файлов по отдельности планирую собрать их в пакет com.shabarshin.web и выложить с исходниками под лицензией GPL.
Last edited by Shaos on 21 Feb 2005 16:28, edited 1 time in total.
|
20 Feb 2005 20:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Интерфейсный класс WebPrint.java: Интерфейсный класс WebModule.java: WebDir - это надстройка над File, который является описателем директория WebParam - это надстройка над Hashtable со строковыми элементами WebStrings - это надстройка над ArrayList со строковыми элементами
|
20 Feb 2005 20:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Основная идея - отображаемая страница состоит из веб-модулей, генерируемых объектами WebModule либо составляемых из шаблонов (через WebEngine, который тоже принимает интерфейс WebModule). Будучи запущенным, главный сервлет создает объект класса WebEngine и передает ему через аргументы ссылку на печатающий объект WebPrint, ссылку на объект WebParam содержащий POST/GET параметры, ссылку на объект WebSQL связанный с уже открытой базой данных и объект WebDir связанный с катологом файлов-шаблонов. Затем главный сервлет дает парсеру WebEngine отпарсить главный шаблон (например index.web) внутри которого будут указываться коды HTML и некие простые условия сборки и вызова других модулей WebModule. Все модули через интерфейс WebPrint пишут в HTML страницу которая затем появляется в браузере пользователя. В будущем планирую на основе этой технологии сделать сайт rwar.net с форумом.
|
20 Feb 2005 20:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Основной класс движка закончен. WebEngine принимает файлы *.web которые состоят из HTML команд и команд движка: \MODULE name Module - загрузка модуля Module под именем name \ACT name argument - выполнить действие в модуле name послав ему argument \VAL param - вывести значение параметра \IF param - блок "если" по наличию параметра \ELIF param - блок "иначе-если" по наличию параметра \ELSE - блок "иначе" \ENDIF - конец блоков "елси-иначе"
Last edited by Shaos on 21 Feb 2005 10:42, edited 2 times in total.
|
21 Feb 2005 00:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Движок в исходниках сейчас весит всего 655 строк (9 файлов). Для полного теста можно запустить http://shabarshin.com/servlet/Rwar (внизу страницы будет написан код из index.web) и тоже самое с параметром http://shabarshin.com/servlet/Rwar?test=1
Last edited by Shaos on 21 Feb 2005 07:03, edited 1 time in total.
|
21 Feb 2005 00:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Вот пример тестового модуля WebTest.java с тремя действиями Base, Para, File которые тестируют базу данных, определение параметров и чтение файлов, соответственно: Вот вариант запуска модуля через web-шаблон: \MODULE test WebTest \ACT test Base \ACT test Para \ACT test File
Last edited by Shaos on 21 Feb 2005 11:52, edited 3 times in total.
|
21 Feb 2005 00:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Добавил новый класс веб-модуля WebSet.java: Модуль предназначен для добавления параметров непосредственно из web-шаблонов. Например: \MODULE set WebSet \ACT set key1=101 \ACT set key2=102 После выполнения данного кода к списку параметров сессии добавятся два параметра с именами key1 и key2 имеющих значения 101 и 102 соответственно.
|
21 Feb 2005 08:42 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Основной плюс движка в том, что он может использоваться не только с сервлетами, но например и с автономной программой на Java (для отладки без веб-сервера). Вот пример сервлета стартующего движок: А вот тоже самое, но в виде автономной программы (HTML-код генерируется в стандартный выходной поток): Из соображений безопасности я заменил некоторые деликатные данные на "..." Как видно оба варианта запускают движок с шаблоном "main.web" внутри которого может быть описан как HTML-код, так и команды для движка - запуск дополнительных веб-модулей и т.д.
|
21 Feb 2005 11:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Пишу веб-модули для сайта rwar.net - уже готов общий дизайн страницы и логин (пока лишь на моем компьютере). Теперь общее кол-во классов - 14. Пока все классы валю в одну кучу - после того как обкатаю движок на боевом сайте, сделаю отдельный пакет com.shabarshin.web для самого движка, а веб-модули будут лежать отдельно.
|
21 Feb 2005 21:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Что-то я подумал что было бы неразумно ограничивать кол-во передаваемых сущностей числом 4 - тогда старые приложения не будут работать с новой либой (например где может появится объект WebCookies или WebSession или WebMail) и наверное я упрячу все это в класс WebEnv, а интерфейс WebModule будет выглядеть так: Из объекта WebEnv (или WebContext?) вышеозначенные ссылки можно будет получить путем вызова методов getPrint(), getParam(), getSQL() и getDir() класса WebEnv.
|
22 Feb 2005 22:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22419 Location: Silicon Valley
|
Завел класс WebContext и все адаптировал к нему - теперь имеем 15 классов
|
23 Feb 2005 22:56 |
|
|