Виртуальная файловая система web
Для web-приложения существует виртуальная файловая система. Она доступна через
сервис jandcode.core.web.WebService
, в частности через набор методов из
jandcode.core.web.virtfile.IVirtFileService
.
Виртуальный файл представлен интерфейсом jandcode.core.web.virtfile.VirtFile
.
Виртуальная система состоит из точек монтирования, каждая из которых представляет собой виртуальный путь папки и реальный путь, который соответствует виртуальному пути папки.
На одну и ту же виртуальную папку можно примонтировать несколько реальных.
Одна и та же реальная папка может быть примонтирована к разным виртуальным путям.
Если во виртуальному пути есть несколько реальных файлов с одинаковым именем, то приложению будет доступен файл из точки монтирования, которая подключена позже.
Пустой виртуальный путь интерпретируется как корень виртуальной файловой системы.
Пример описания точек монтирования в модуле:
<root>
<web>
<mount name="my-mount-point-1"
virtualPath=""
realPath="d:/temp"/>
<mount name="my-mount-point-2"
virtualPath=""
realPath="d:/data"/>
<mount name="my-mount-point-2"
virtualPath="data/temp"
realPath="#{path}/data-temp"/>
</web>
</root>
Конфигурация module.cfx
web/mount
Описание точки монтирования.
Формат:
<root>
<web>
<mount name="NAME"
virtualPath="VIRTUAL-PATH"
realPath="REAL-PATH"
class="jandcode.core.web.virtfile.IMountProvider"
/>
</web>
</root>
name
- уникальное имя точки монтирования на уровне приложенияvirtualPath
- виртуальный путь для точки монтированияrealPath
- реальный путь, для монтирования в виртуальный путьclass
- провайдер точек монтирования. В реальном приложении обычно не используется. Этот класс должен создать набор точек монтирования. Если указан, то все атрибуты узлаmount
интерпретируются этим классом.
web/mount-module
Монтирование каталога модуля способом по умолчанию.
Формат:
<root>
<web>
<mount-module default="BOOL">
<!-- особое монтирование в рамках модуля:
<mount name="NAME"
virtualPath="VIRTUAL-PATH"
realPath="REAL-PATH"
/>
-->
</mount-module>
</web>
</root>
default
- монтировать ли модуль по умолчанию, описано ниже. Если не установлено, считаетсяtrue
В большинстве случаев настройка выглядет так:
<root>
<web>
<mount-module/>
</web>
</root>
Рекомендуется монтировать модули именно этой настройкой.
Если в модуле явно определены точки монтирования web/mount
,
то следует иметь ввиду: они будут созданы после обработки mount-module
для всех модулей.
Если необходимо особое монтирование папок модуля, необходимо для этого использовать
узлы web/mount-module/mount
, формат которых совпадает с web/mount
.
Модуль, примонтированный таком способом, в дальнейшем имеет статус web-модуля. Этот статус используется в некоторых местах для настроек по соглашению.
Корневая папка модуля монтируется в виртуальный каталог, соответствующий виртуальному
пути модуля (имя пакета модуля, где точки заменены на '/'
). Соответствует настройке:
<mount name="#{module}--mount-module"
realPath="#{module.path}"
virtualPath="#{module.packagepath}"/>
Если в корне модуля имеются специальные папки (их список и описание ниже), то каждая такая папка монтируется особым способом.
Список специальных папок:
webroot
- монтируется в/
. По соглашению используется для формирования корневой файловой системы или для перекрытия виртуальных файлов своей версией.
Допустим, что в модуле имеется папка webroot
. Тогда будет использована
такая настройка точек монтирования:
<mount name="#{module}--mount-module--webroot"
realPath="#{module.path}/webroot"
virtualPath=""/>
Если модуль доступен в исходниках и в проекте модуля project.jc
имеется
команда генерации исходников gen-src
и сгенерированные исходники
содержат такой же путь, как и обычные, то он монтируется аналогично нормальным исходникам.
META-INF/jc-data/webroot
Каталоги META-INF/jc-data/webroot
, которые были обнаружены в classpath у модулей,
которые входят в приложение, автоматически монтируются в корневой каталог виртуальной файловой системы.
Такие каталоги, к примеру, используются для поставки сторонних библиотек javascript.
Они монтируются до применения настроек монтирования модулей, что позволяет, при
необходимости, перекрыть файлы из библиотек своими версиями.
resource-webroot
Каталоги resource-webroot
, которые были обнаружены в classpath,
автоматически монтируются в корневой каталог виртуальной файловой системы.
Монтирование не учитывает модули, достаточно просто наличие пути в classpath.
Такие каталоги обычно генерируются какими либо сборщиками. В режиме разработки они обычно доступны напрямую, а в prod-режиме пакуются в jar-файлы.