#java #tomcat #servlets #netbeans
#java #tomcat #сервлеты #netbeans
Вопрос:
я хочу сказать своему java-сервлету игнорировать вызовы для статических файлов, например, если файл существует — просто верните фактический файл без фактической загрузки сервлета.
в моем примере у меня есть MyServlet в netbeans, и в каталоге «веб-страницы» я разместил image.jpg .
затем я сгенерировал файл .war и поместил его в tomcat / webapps
когда я пытаюсь сделать запрос на localhost:8080/MyServlet/image.jpg — файл не загружается, вместо него выполняется сервлет.
я хочу, чтобы, если файл существует, он вернул его, в противном случае будет запущен сервлет.
есть ли быстрый способ его реализации?
Комментарии:
1. Вы смешиваете сервлеты и веб-приложения. В общем случае статическое содержимое обслуживается стандартным (зависящим от контейнера) сервлетом и работает без каких-либо изменений. Как выглядит ваше сопоставление сервлетов (я полагаю, это что-то вроде
/*
)?
Ответ №1:
Сопоставление вашего сервлета с /
or /*
не является стандартным способом реализации сервлетов. В общем случае вы сопоставляете глобальные (контроллерные) сервлеты с таким путем, как /myServlet/*
. Сервлет Tomcat по умолчанию уже доступен для обслуживания вашего статического содержимого. Он настроен в <tomcat>/conf/web.xml
. Извлечение из встроенной документации:
<!-- The default servlet for all web applications, that serves static -->
<!-- resources. It processes all requests that are not mapped to other -->
<!-- servlets with servlet mappings (defined either here or in your own -->
Если вы будете следовать вышеупомянутому подходу, URL-адреса в вашем приложении могут выглядеть следующим образом:
Статический ресурс: http://myserver/myWAR/images/image.gif
URL-адреса вашего сервлета: http://myserver/myWAR/myServlet/*
(* := подстановочный знак)
Конечно, доступны более сложные опции, такие как выгрузка статического содержимого на внешний веб-сервер. Вы также можете переопределить стандартную конфигурацию, но в большинстве ситуаций в этом нет необходимости (по крайней мере, по моему опыту).
Ответ №2:
Обычно вы справляетесь с этим с помощью сопоставления сервлетов или путем удаления статических ресурсов из сопоставления сервлетов.
В противном случае, если запрос сопоставляется с вашим сервлетом, вам нужно либо (а) проверить наличие файла в сервлете и перенаправить на реальное имя файла, либо передать изображение обратно самостоятельно, либо (б) написать фильтр, который достаточно знает о структуре вашего веб-приложения, чтобы определить, следует ли запрособрабатывается вашим сервлетом или контейнером.
Если бы вы описали свой вариант использования, было бы проще быть более полезным.
Комментарии:
1. для моего сопоставления сервлетов установлен URL-шаблон / , прямо сейчас кажется, что потоковая передача файла является решением
Ответ №3:
Для статических файлов вам, скорее всего, нужно просто использовать http://localhost:8080/image.jpg (т.е. без части MyServlet в URL-адресе)
Комментарии:
1. Вы уверены, что разместили image.jpg в папке , которая web.xml указывает, является ли веб-корень?