Подтвердить что ты не робот

Spring 3 ресурса MVC и тег <mvc: resources/">

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

Вот часть моего beans config:

<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?). Во-вторых, эта конфигурация не работает, я не вижу изображение. Что не так?

Спасибо!

EDIT: решение, приведенное здесь: Spring Tomcat и статические ресурсы и mvc: resources также не работают... Добавлено без успеха.

EDIT 2: я попытался удалить тэг mvc: resource и позволить только mvc: default-servlet-handler > one, дал мне бесконечный цикл и stackoverflow... o_O (Обслуживание статического содержимого с помощью Spring 3)

4b9b3361

Ответ 1

Обнаружена ошибка:

Конечный xxx-servlet.xml config:

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

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

Работы!

Ответ 2

<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 (похоже, что вы использовали какой-то шаблон на основе роу), может заключаться в том, чтобы выставлять ресурсы (например, js файлы) в форме jars, если они находятся в каталоге WEB-INF/public-resources в банке.

Ответ 3

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

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

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

Источники (Spring в книге действий и http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)

Ответ 4

Разный порядок делает работу:)

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

Ответ 5

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

<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven />

Ответ 6

Как сказал @Nancom

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

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

resources/images/logo.png"

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

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

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

Итак,

 <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

Ответ 7

Вы можете сохранить каталог 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"/>

Ответ 8

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

Ответ 9

Ответ

@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" />