Ответ 1
Обнаружена ошибка:
Конечный xxx-servlet.xml config:
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/" />
Изображение в src/webapp/resources/logo.png
Работы!
У меня возникают некоторые проблемы с тегом (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)
Обнаружена ошибка:
Конечный xxx-servlet.xml config:
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/" />
Изображение в src/webapp/resources/logo.png
Работы!
<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
в банке.
Рекомендации для ресурсов для обработки HTTP-запросов GET для /resources/ **, предлагая статические ресурсы в каталоге ${webappRoot}/resources, просто добавить следующую строку в файл конфигурации:
<resources mapping="/resources/**" location="/resources/" />
Это сработало для меня.
Источники (Spring в книге действий и http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)
Разный порядок делает работу:)
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
Это работает для меня:
<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven />
Как сказал @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
Вы можете сохранить каталог 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"/>
Я также встречал эту проблему раньше. Моя ситуация была Я не помещал все фреймы размером 62 spring в файл lib (spring -framework-4.1.2.RELEASE edition), это действительно сработало. И затем я также изменил 3.0.xsd на 2.5 или 3.1 для теста, все получилось. Конечно, есть и другие факторы, влияющие на ваш результат.
@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" />