Сопоставление статических и динамических файлов в Tomcat / Spring?
Вопрос
Я использовал следующее в web.xml для настройки сервлета для динамической генерации PDF-файлов.
<servlet-mapping>
<servlet-name>pdfServlet</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
Теперь я также должен обслуживать несколько статических файлов PDF. Какой самый чистый способ настроить это? В настоящее время я работаю только с четырьмя или пятью динамическими файлами, и не ожидаю, что это увеличится, если это вообще поможет.
Решение
Вам вообще не нужно настраивать статические файлы; если Tomcat сможет найти файл, он будет его обслуживать. Конфигурация необходима только тогда, когда вы хотите, чтобы Tomcat вызывал некоторый код.
Другие советы
Это удивительно раздражающая проблема, которую я пока не нашел удовлетворительного решения.
Основой проблемы, как я уверен, вы знаете, является то, что ваш web.xml настроен на отправку всех запросов на * .pdf вашему сервлету Spring. Очевидная вещь, которую нужно попробовать, - это чтобы сервлет распознал, какие запросы относятся к статическим PDF-файлам, и затем перенаправил запрос внутренне в этот статический файл, но, поскольку файл, скорее всего, будет заканчиваться на .pdf, запрос будет просто возвращаться через сервлет. снова до тошноты.
Единственный обходной путь для этого, который я попробовал, - это заставить сервлет вручную прочитать статический PDF из контекста сервлета (используя ServletContext.getResource ()
) и записать его в выходной файл сервлета. поток, убедившись, что правильно установить различные заголовки. Это не очень приятно.
Единственный вариант, который я могу придумать, - это сделать url-pattern
в web.xml
немного менее широким, чтобы только динамические запросы PDF направлялись на сервлет, и запросы на статические PDF-файлы направляются в файл, но для этого потребуется какое-то соглашение об именах для ваших документов, что может оказаться невозможным.