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>
Другие вопросы по тегам