SSI (Server Side Includes)#
SSI (Server Side Includes) — директивы, которые размещаются в HTML-страницах и обрабатываются на сервере во время отправки клиенту. Они позволяют добавлять динамически генерируемое содержимое в существующую HTML-страницу без необходимости обработки всей страницы через CGI-программу или подобные механизмы.
Поддержка SSI в Tomcat доступна в виде сервлета и фильтра может быть добавлена, когда Tomcat используется в качестве HTTP-сервера. Доступно использование либо сервлета, либо фильтра, но не двух одновременно.
Сервлет SSI реализован с использованием класса org.apache.catalina.ssi.SSIServlet. Обычно сопоставляется с шаблоном URL *.shtml. Чтобы использовать сервлет SSI, удалите XML-комментарии вокруг конфигурации сервлета и servlet-mapping в файле $CATALINA_BASE/conf/web.xml.
Фильтр SSI реализован с использованием класса org.apache.catalina.ssi.SSIFilter. Обычно сопоставляется с шаблоном URL *.shtml, хотя его можно сопоставить с *, так как он выборочно включает/отключает обработку SSI на основе MIME-типов. Параметр contentType позволяет применять обработку SSI к JSP-страницам, JavaScript или любому другому содержимому. Чтобы использовать фильтр SSI, удалите XML-комментарии вокруг конфигурации фильтра и filter-mapping в файле $CATALINA_BASE/conf/web.xml.
Поддержка SSI по умолчанию отключена в Tomcat.
Директивы SSI могут использоваться для выполнения внешних программ. Если используется Java SecurityManager, это может обойти конфигурацию политики безопасности в catalina.policy.
Только привилегированные Context могут использовать функции SSI.
Конфигурация сервлета#
Существует несколько параметров инициализации сервлета, которые можно использовать для настройки поведения SSI:
buffered— вывод сервлета буферизируется (0=false,1=true). По умолчанию -0.debug— уровень детализации отладки для сообщений, записываемых сервлетом. По умолчанию -0.expires— количество секунд до истечения срока действия страницы с SSI-директивами. По умолчанию все SSI-директивы обрабатываются для каждого запроса.isVirtualWebappRelative— «виртуальные» пути SSI-директив интерпретируются относительно корневого контекста. По умолчанию -false.inputEncoding— кодировка для ресурсов SSI, если нельзя определить из самого ресурса. По умолчанию используется кодировка платформы.outputEncoding— кодировка для результата обработки SSI. По умолчанию UTF-8.allowExec— включение командыexec. По умолчанию -false.
Конфигурация фильтра#
Существует несколько параметров инициализации фильтра, которые можно использовать для настройки поведения SSI:
contentType— регулярное выражение, которое должно совпадать перед применением обработки SSI. По умолчанию -text/x-server-parsed-html(;.*)?.debug— уровень детализации отладки для сообщений, записываемых фильтром. По умолчанию -0.expires— количество секунд до истечения срока действия страницы с SSI-директивами. По умолчанию все SSI-директивы обрабатываются для каждого запроса.isVirtualWebappRelative— «виртуальные» пути SSI-директив интерпретируются относительно корневого контекста. По умолчанию -false.allowExec— включение командыexec. По умолчанию -false.
Директивы SSI#
Server Side Includes вызываются путем встраивания SSI-директив в HTML-документ, тип которого будет обработан сервлетом SSI. Директивы имеют форму HTML-комментария. Директива заменяется результатом ее интерпретации перед отправкой страницы клиенту. Общий вид директивы:
<!--#directive [param=value] -->
Где:
param- параметр;value- значение.
Доступные директивы:
config- используется для настройки сообщения об ошибке SSI, формата дат и размеров файлов, обрабатываемых SSI:errmsg— сообщение об ошибке для SSI.sizefmt— формат для размеров в директивеfsize.timefmt— формат для временных меток в директивеflastmod.
echo— заменяется значением переменной. Необязательный параметрencodingуказывает тип кодировки. Допустимые значения:entity(по умолчанию),urlилиnone.exec— используется для выполнения команд на хостовой системе.include— вставляет содержимое файла. Путь интерпретируется относительно документа, в котором используется директива.flastmod— возвращает файл ко времени последнего изменения. Путь интерпретируется относительно документа.fsize— возвращает размер файла. Путь интерпретируется относительно документа.printenv— возвращает список всех определенных переменных.set— используется для присвоения значения пользовательской переменной.if,elif,endif,else- используются для создания условных секций.
Переменные SSI#
Переменные SSI реализованы через атрибуты запроса объекта javax.servlet.ServletRequest и не ограничены сервлетом SSI. Переменные, начинающиеся с имен java., javax., sun или org.apache.catalina.ssi.SSIMediator. не могут использоваться.
Сервлет SSI в настоящее время реализует следующие переменные:
Имя переменной |
Описание |
|---|---|
|
Тип аутентификации, используемый для пользователя: |
|
Длина данных в байтах или количестве символов |
|
MIME-тип данных запроса |
|
Текущая дата и время по GMT |
|
Текущая дата и время в локальном часовом поясе |
|
Имя текущего файла |
|
Виртуальный путь к файлу |
|
Ревизия Common Gateway Interface, используемая сервером |
|
Список MIME-типов, которые может принять клиент |
|
Список типов сжатия, которые может принять клиент |
|
Список языков, которые может принять клиент |
|
Способ управления соединением от клиента |
|
Веб-сайт, запрошенный клиентом |
|
URL документа, с которого клиент перешел |
|
Браузер, который клиент использует для запроса |
|
Дата и время последнего изменения текущего файла |
|
Дополнительная информация о пути, переданная сервлету |
|
Преобразованный путь, указанный в переменной |
|
Строка запроса, следующая за |
|
Недекодированная строка запроса с метасимволами оболочки |
|
IP-адрес пользователя, делающего запрос |
|
Имя хоста пользователя, делающего запрос |
|
Номер порта на удаленном IP-адресе пользователя, делающего запрос |
|
Аутентифицированное имя пользователя |
|
Метод, с которым был отправлен запрос |
|
Веб-страница, изначально запрошенная клиентом |
|
Расположение текущей веб-страницы на сервере |
|
Имя веб-страницы |
|
IP-адрес сервера |
|
Имя хоста или IP-адрес сервера |
|
Порт, на котором сервер получил запрос |
|
Протокол, используемый сервером |
|
Имя и версия серверного ПО, отвечающего на запрос клиента |
|
Токен, используемый для идентификации текущей сессии, если она установлена |