2013-06-04 3 views
1

Как разработчик, совершенно новый для 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, и у меня нет его, чтобы дать его.

Есть ли простой способ от создать a ServletContext, который я могу ввести в контроллер?

Вперед статических ресурсов

Кроме того, мне нужно еще Servlet в том же клиентском пачке, чтобы иметь возможность forward к JSPs в связке с помощью RequestDispatcher, дополнительную причину мне нужен полноценный ServletContext.

В целом, работоспособно (даже если оно не изящно)? И если да, то каким образом я могу создать ServletConteext? Если это не работает, какова альтернатива?

Все это довольно сложно. Хотя я не (не могу :)) попросить реализованный прототип, я буду признателен за более краткий инструктаж вроде «вставить X в Y и обернуть его с помощью Z, и вы все настроены».

+0

Может быть, это поможет вам http://stackoverflow.com/a/3819553/283426 –

ответ

0

Проект с открытым исходным кодом Amdatu имеет комплект, который позволяет легко обслуживать статические ресурсы из комплекта. Он использует шаблон расширителя, который означает, что вам просто нужно добавить некоторую информацию манифеста Bundle в:

X-Web-Resource-Version: 1.0 
X-Web-Resource: path/to/resources 

Перейти к [1] ​​этой странице и прокрутите вниз для получения дополнительной информации о нем. Конечно, вам нужно развернуть пакет «Resource Handler» Amdatu и его зависимости, которые можно найти в этом репозитории [2].

[1] http://amdatu.org/components/web.html

[2] http://repository.amdatu.org/snapshot/org.amdatu.web.resourcehandler/org.amdatu.web.resourcehandler-1.0.2.jar