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 в настоящее время реализует следующие переменные:

Переменные SSI#

Имя переменной

Описание

AUTH_TYPE

Тип аутентификации, используемый для пользователя: BASIC, FORM

CONTENT_LENGTH

Длина данных в байтах или количестве символов

CONTENT_TYPE

MIME-тип данных запроса

DATE_GMT

Текущая дата и время по GMT

DATE_LOCAL

Текущая дата и время в локальном часовом поясе

DOCUMENT_NAME

Имя текущего файла

DOCUMENT_URI

Виртуальный путь к файлу

GATEWAY_INTERFACE

Ревизия Common Gateway Interface, используемая сервером

HTTP_ACCEPT

Список MIME-типов, которые может принять клиент

HTTP_ACCEPT_ENCODING

Список типов сжатия, которые может принять клиент

HTTP_ACCEPT_LANGUAGE

Список языков, которые может принять клиент

HTTP_CONNECTION

Способ управления соединением от клиента

HTTP_HOST

Веб-сайт, запрошенный клиентом

HTTP_REFERER

URL документа, с которого клиент перешел

HTTP_USER_AGENT

Браузер, который клиент использует для запроса

LAST_MODIFIED

Дата и время последнего изменения текущего файла

PATH_INFO

Дополнительная информация о пути, переданная сервлету

PATH_TRANSLATED

Преобразованный путь, указанный в переменной PATH_INFO

QUERY_STRING

Строка запроса, следующая за ? в URL

QUERY_STRING_UNESCAPED

Недекодированная строка запроса с метасимволами оболочки

REMOTE_ADDR

IP-адрес пользователя, делающего запрос

REMOTE_HOST

Имя хоста пользователя, делающего запрос

REMOTE_PORT

Номер порта на удаленном IP-адресе пользователя, делающего запрос

REMOTE_USER

Аутентифицированное имя пользователя

REQUEST_METHOD

Метод, с которым был отправлен запрос

REQUEST_URI

Веб-страница, изначально запрошенная клиентом

SCRIPT_FILENAME

Расположение текущей веб-страницы на сервере

SCRIPT_NAME

Имя веб-страницы

SERVER_ADDR

IP-адрес сервера

SERVER_NAME

Имя хоста или IP-адрес сервера

SERVER_PORT

Порт, на котором сервер получил запрос

SERVER_PROTOCOL

Протокол, используемый сервером

SERVER_SOFTWARE

Имя и версия серверного ПО, отвечающего на запрос клиента

UNIQUE_ID

Токен, используемый для идентификации текущей сессии, если она установлена