Отправка / пересылка сервлету, который обслуживает статический контент из другого пакета
Как разработчик, совершенно новый для Spring и OSGi и возвращающийся в Tomcat после долгого времени, я даже не знаю, смогу ли я правильно задать этот вопрос. Но я надеюсь, что кто-то сможет понять, где я застрял и как мне действовать.
Установка включает в себя пакеты Tomcat 7 в контейнере Equinox OSGi. Пакет обеспечивает "MainDispatcherServlet
", который расширяет org.springframework.web.servlet.DispatcherServlet
, Регистрация других пакетов услуг org.springframework.web.servlet.mvc.Controller
экземпляры на доске OSGi, которые MainDispatcherServlet
слушает. MainDispatcherServlet
предоставляет API для сопоставления URL-шаблонов с зарегистрированными контроллерами, которые, в свою очередь, используют SimpleUrlHandlerMapping
идентифицировать обработчик для отдельных запросов. Пакеты услуг часто реализуют Javax GenericServlet
и завернуть в ServletWrappingController
для регистрации.
Это очень хорошо работает. Теперь мне нужно следующее
Статические Ресурсы
Отправка статических ресурсов, таких как изображения и jsps (не знаю, считаются ли они статическими) в этих пакетах.
Поиск на SO кажется, что это может быть сделано с некоторыми <mvc:resources>
магия в клиентском пакете, хотя я не совсем понимаю точный XML. Но если я правильно понимаю, запрос не будет проходить через MainDispatcherServlet
, что является требованием.
Таким образом, подход, который я сейчас использую, заключается в использовании org.apache.catalina.servlets.DefaultServlet
и заверните его в контроллер, как описано выше. Это хороший способ сделать это? Проблема здесь в том, что DefaultServlet
нужен ServletContext
и у меня нет того, чтобы дать это.
Есть ли простой способ создать ServletContext
что я могу ввести в контроллер?
Переслать в статические ресурсы
Далее мне нужен еще один Servlet
в том же клиентском пакете, чтобы иметь возможность forward
на JSPS в комплекте с помощью RequestDispatcher
Дочерняя причина мне нужна полноценная ServletContext
,
Таким образом, это работоспособно (даже если не элегантно)? И если да, то как мне создать ServletConteext? Если это не работает, какова альтернатива?
Все это довольно сложно. Хотя я не (не могу:)) просить о реализованном прототипе, я буду признателен за более краткую инструкцию, такую как "ввести X в Y и обернуть его в Z, и все готово".
1 ответ
Проект с открытым исходным кодом Amdatu имеет пакет, который позволяет вам легко обслуживать статические ресурсы из пакета. Он использует шаблон расширения, что означает, что вам просто нужно добавить некоторую информацию в манифест вашего пакета:
X-Web-Resource-Version: 1.0
X-Web-Resource: path/to/resources
Перейдите на эту страницу [1] и прокрутите вниз для получения дополнительной информации об этом. Конечно, вам необходимо развернуть пакет Amdatu "обработчик ресурсов" и его зависимости, которые можно найти в этом репозитории [2].