Расширенный ввод/вывод#
Использование функций, приведенных ниже, требует HTTP-коннектор. Коннекторы AJP их не поддерживают.
Асинхронная запись#
При использовании HTTP-коннекторов (на основе APR или NIO/NIO2) Tomcat поддерживает использование sendfile для отправки больших статических файлов. Операции записи, как только нагрузка на систему увеличивается, выполняются асинхронно. Вместо отправки большого ответа с использованием блокирующей записи, можно записать содержимое в статический файл и отправить его с помощью кода sendfile. Valve кеширования может использовать данный механизм для кеширования данных ответа в файле, а не в памяти. Поддержка sendfile доступна, если атрибут запроса org.apache.tomcat.sendfile.support установлен в Boolean.TRUE.
Любой сервлет может указать Tomcat выполнить вызов sendfile, установив соответствующие атрибуты запроса. Также необходимо правильно установить длину содержимого для ответа. При использовании sendfile убедитесь, что для запроса или ответа не используется обертывание. Тело ответа будет отправлено позже коннектором, и в случае использования обертывания телом нового запроса будет старый запрос. Фильтрация в этом случае также невозможна. Помимо установки необходимых атрибутов запроса, сервлет не должен отправлять никаких данных ответа, но может использовать любые методы, которые изменяют заголовки ответа.
Атрибуты запроса для sendfile:
org.apache.tomcat.sendfile.filename- стандартное имя файла, который будет отправлен, в видеString.org.apache.tomcat.sendfile.start- начальное смещение в файле, в видеLong.org.apache.tomcat.sendfile.end- конечное смещение в файле, в видеLong.
Помимо установки этих параметров, необходимо также установить заголовок content-length.