Tomcat, обслуживающий статические ресурсы в приложении Spring MVC
Я создаю приложение Spring MVC, и сервлет frontController отображается в "/", перехватив все запросы, и я смогу обслуживать статическое содержимое (.js,.css,.png...) из tomcat и не к весне. Моя структура приложения
-webapp/
styles/
images/
WEB-INF/
views/
По умолчанию, поскольку frontController отображается в корне контекста моего приложения, он обрабатывает все запросы, но не обслуживает статический ресурс. Конфигурация mvc для статических ресурсов следующая.
<mvc:resources mapping="/resources/**" location="/"/>
И код страницы:
<img src="resources/images/logo.png" />
Мне нужно настроить Tomcat для обслуживания статических ресурсов без пружинного взаимодействия.
Любое предложение?
3 ответа
Вы можете переназначить сервлет по умолчанию tomcats (который обрабатывает статическое содержимое), например
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
Взгляните на эту ветку списка рассылки и посмотрите, подходит ли это то, что вы ищете.
Другое потенциальное решение - просто добавьте следующее в свой Spring DispatcherServlet.xml ( Spring Docs)
<mvc:default-servlet-handler/>
Этот тег позволяет отображать DispatcherServlet в "/" (таким образом переопределяя отображение сервлета по умолчанию контейнера), в то же время позволяя обрабатывать статические запросы ресурсов сервлетом по умолчанию контейнера. Он настраивает DefaultServletHttpRequestHandler с отображением URL-адреса (с учетом самого низкого приоритета) "/**". Этот обработчик будет пересылать все запросы сервлету по умолчанию.
Плюсы (по сравнению с решением @nos)
- Решение по переопределению URL ведет себя по-разному в зависимости от вашего контейнера. Для Jetty/Tomcat 6 это означает "сопоставить URL/images/* с WEBAPP/images/ ". Tomcat <6 (и, возможно, другие) воспринимает это как "отображение URL / изображений / на WEBAPP/*", что является БОЛЬШИМ нарушением безопасности.
- Если вы хотите использовать favicon.ico, robots.txt и т. Д. Со своего сайта, вам придется создать для них дополнительные URL-отображения.
Cons
- Весна в петле, что, безусловно, является ненужным.
Кроме того, независимо от того, какое решение вы предпочитаете, я бы предложил добавить следующее в ваш web.xml, чтобы предотвратить списки каталогов (например, URL / изображения)
<servlet>
<servlet-name>default</servlet-name>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>
</servlet>