2010-09-18 3 views
5

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

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

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

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

И код страницы, заключается в следующем:

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

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

Любое предложение?

ответ

1

Посмотрите на this mailing list thread и посмотрите, что делает то, что вы ищете.

+1

Танки, я нашел решение, только сопоставляю статические расширения ресурсов с defaultServlet. – Rigoni

7

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

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/images/*</url-pattern> 
</servlet-mapping> 
1

Другим возможным решением - Просто добавьте следующие строки в Спринг DispatcherServlet.xml (Spring Docs)

<mvc:default-servlet-handler/> 

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

Плюсы (по сравнению с @ раствором н.у.к.'S)

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

Против

  • Весна в цикле, который, безусловно, то, что не является необходимым.

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

<servlet> 
    <servlet-name>default</servlet-name> 
    <init-param> 
     <param-name>dirAllowed</param-name> 
     <param-value>false</param-value> 
    </init-param> 
</servlet> 
Смежные вопросы