Tomcat, обслуживающий статические ресурсы в приложении Spring MVC - PullRequest
5 голосов
/ 19 сентября 2010

Я создаю приложение Spring MVC, и сервлет frontController отображается в «/», перехватывая все запросы, и я смогу обслуживать статическое содержимое (.js, .css, .png ...) от кота а не к весне. Моя структура приложения

-webapp/
   styles/
   images/
   WEB-INF/
          views/

По умолчанию, поскольку frontController отображается в корне контекста моего приложения, он обрабатывает все запросы, но не обслуживает статический ресурс. Конфигурация mvc для статических ресурсов следующая.

<mvc:resources mapping="/resources/**" location="/"/>

И код страницы:

<img src="resources/images/logo.png" />

Мне нужно настроить Tomcat для обслуживания статических ресурсов без взаимодействия пружин .

Есть предложения?

Ответы [ 3 ]

7 голосов
/ 19 сентября 2010

Вы можете переназначить сервлет tomcats по умолчанию (который обрабатывает статический контент), например

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>
1 голос
/ 14 июля 2012

Другое потенциальное решение - просто добавьте следующее в свой Spring DispatcherServlet.xml ( Spring Docs )

<mvc:default-servlet-handler/>

Этот тег позволяет отображать DispatcherServlet в "/"(таким образом переопределяя отображение сервлета по умолчанию контейнера), в то же время позволяя обрабатывать запросы статических ресурсов сервлетом контейнера по умолчанию.Он настраивает DefaultServletHttpRequestHandler с отображением URL-адреса (с наименьшим порядком приоритета) «/ **».Этот обработчик будет пересылать все запросы сервлету по умолчанию.

Плюсы (по сравнению с решением @ nos)

  • Решение для переопределения URL-адреса работает по-разному в зависимости от вашего контейнера.Для Jetty / Tomcat 6 это означает «сопоставить URL / images / * с WEBAPP / images / ».Tomcat <6 (и, возможно, другие) воспринимает это как «сопоставление URL / images / </em> с WEBAPP / *», что является БОЛЬШИМ брешем в безопасности.
  • Если вы хотите обслуживать favicon.ico,robots.txt и т. д. с вашего сайта, тогда вам нужно будет создать для них дополнительные URL-отображения.

Минусы

  • Spring находится в цикле, которыйопределенно что-то ненужное.

Кроме того, независимо от того, какое решение вы предпочитаете, я бы предложил добавить следующее в ваш web.xml, чтобы предотвратить списки каталогов (например, URL / images)

<servlet>
  <servlet-name>default</servlet-name>
  <init-param>
      <param-name>dirAllowed</param-name>
      <param-value>false</param-value>
  </init-param>
</servlet>
1 голос
/ 19 сентября 2010

Посмотрите на эту ветку списка рассылки и посмотрите, будет ли это то, что вы ищете.

...