Spring 3 MVC ресурсы и тег - PullRequest
       1

Spring 3 MVC ресурсы и тег

22 голосов
/ 19 ноября 2011

У меня возникли некоторые проблемы с тегом (Spring 3.0.5). Я хочу добавить изображения в свое веб-приложение, но оно не работает.

Вот часть моего конфига bean:

<mvc:annotation-driven/>
<mvc:default-servlet-handler default-servlet-name="ideafactory"/>
<mvc:resources mapping="/resources/**" location="/, classpath:/WEB-INF/public-resources/" cache-period="10000" />

Попытка добавить изображение в файл jsp:

<img src="<c:url value="/resources/logo.png" />" alt="Idea Factory" />

Прежде всего, я действительно не знаю, где хранить ресурсы (src / main / resources / public-resources? Src / main / webapp / WEB-INF / public-resources?). Во-вторых, этот конфиг не работает, я не вижу изображение. Что не так?

Спасибо!

РЕДАКТИРОВАТЬ: решение, приведенное здесь: Spring Tomcat и статические ресурсы и mvc: resources тоже не работает ... Добавлено без успеха.

РЕДАКТИРОВАТЬ 2: Я попытался удалить тег mvc: resource и позволить только mvc: default-servlet-handler> one, дал мне бесконечный цикл и стекозагрузку ... o_O ( Обслуживание статического содержимого в Spring 3 )

Ответы [ 9 ]

26 голосов
/ 19 ноября 2011

Нашли ошибку:

Конечная конфигурация xxx-servlet.xml:

<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/" />

Изображение в src / webapp / resources / logo.png

Works!

24 голосов
/ 19 ноября 2011
<mvc:resources mapping="/resources/**"
               location="/, classpath:/WEB-INF/public-resources/"
               cache-period="10000" />

Поместите ресурсы в: src/main/webapp/images/logo.png, а затем получите к ним доступ через /resources/images/logo.png.

. В war они будут расположены в images/logo.png.Таким образом, первое местоположение (/) формы mvc:resources подберет их.

Второе местоположение (classpath:/WEB-INF/public-resources/) в mvc:resources (похоже, вы использовали какой-то шаблон на основе roo) может быть выставленоресурсы (например, js-файлы) образуют jar-файлы, если они находятся в каталоге WEB-INF/public-resources в jar-файле.

5 голосов
/ 01 апреля 2015

Рекомендации по ресурсам для обработки запросов HTTP GET для / resources / **, предлагая статические ресурсы в каталоге $ {webappRoot} / resources, просто добавьте следующую строку в файл конфигурации:

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

Это сработало для меня.

Источники (книга Spring in Action и http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)

3 голосов
/ 23 октября 2016

Как сказал @ Nancom

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

Итак, для ясности, наше изображение в

resources/images/logo.png"

Атрибут location тега определяет базовое местоположение каталога статических ресурсов, которые вы хотите обслуживать. Это может быть путь к изображениям, доступный в каталоге src/main/webapp/resources/images/; Вы можете задаться вопросом, почему мы указали в качестве значения местоположения только / resources / вместо src / main / webapp / resources / images / . Это потому, что мы рассматриваем каталог ресурсов как базовый каталог для всех ресурсов, у нас может быть несколько подкаталогов в каталоге ресурсов для размещения наших изображений и других статических файлов ресурсов.

Второй атрибут, mapping , просто указывает путь запроса, который необходимо сопоставить с этим каталогом ресурсов. В нашем случае мы присвоили /resources/** в качестве значения отображения. Таким образом, если любой веб-запрос начинается с пути запроса /resource, он будет сопоставлен с каталогом ресурсов, а символ /** указывает на рекурсивный поиск любых файлов ресурсов в каталоге базовых ресурсов. .

Так что для URL, как http://localhost:8080/webstore/resource/images/logo.png. Таким образом, при обслуживании этого веб-запроса Spring MVC будет рассматривать /resource/images/logo.png в качестве пути запроса. Таким образом, он попытается сопоставить /resource с базой ресурсов, ресурсами. В этом каталоге он попытается найти оставшийся путь URL-адреса, который равен /images/logo.png. Поскольку у нас есть каталог images в каталоге ресурсов, Spring может легко найти файл изображения из каталога images.

So

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

дает нам данные [запросы] -> [сопоставление ресурсов]:

http://localhost:8080/webstore/resource/images/logo.png -> поиск в resource/images/logo.png

http://localhost:8080/webstore/resource/images/small/picture.png -> поиск в resource/images/small/picture.png

http://localhost:8080/webstore/resource/css/main.css -> поиск в resource/css/main.css

http://localhost:8080/webstore/resource/pdf/index.pdf -> поиск в resource/pdf/index.pdf

3 голосов
/ 18 декабря 2013

у меня работает:

<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven />
3 голосов
/ 16 февраля 2013

Различный порядок, чтобы он работал:)

<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
1 голос
/ 11 ноября 2016

Вы можете хранить каталог rsouces в каталоге NetBeans: веб-страницы Eclipse: webapps

Файл: dispatcher-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <context:component-scan base-package="controller" />

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <mvc:resources location="/resources/theme_name/" mapping="/resources/**"  cache-period="10000"/>
    <mvc:annotation-driven/>

</beans>

Файл: web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
        <url-pattern>*.css</url-pattern>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>
</web-app>

В файле JSP

<link href="<c:url value="/resources/css/default.css"/>" rel="stylesheet" type="text/css"/>
0 голосов
/ 20 июля 2016

@ Nanocom ответ работает для меня. Возможно, строки должны быть в конце или потому, что они должны быть после некоторого класса bean, подобного следующему:

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler" />    

<mvc:resources mapping="/resources/**" 
               location="/resources/" 
               cache-period="10000" />
0 голосов
/ 12 декабря 2014

Я тоже встречался с этой проблемой раньше. У меня была ситуация Я не поместил все 62 фреймворка Spring Framework в файл lib (версия spring-framework-4.1.2.RELEASE), это сработало. А потом я также изменил 3.0.xsd на 2.5 или 3.1 для теста, все получилось. Конечно, есть и другие факторы, влияющие на ваш результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...