not - Spring 3 MVC recursos y etiqueta<mvc: resources/>
spring mvc resources configuration (9)
Diferente orden lo hace funcionar :)
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
Estoy teniendo algunos problemas con la etiqueta (Spring 3.0.5). Quiero agregar imágenes a mi aplicación web, pero no funciona.
Aquí es parte de mi configuración de frijoles:
<mvc:annotation-driven/>
<mvc:default-servlet-handler default-servlet-name="ideafactory"/>
<mvc:resources mapping="/resources/**" location="/, classpath:/WEB-INF/public-resources/" cache-period="10000" />
Intentando agregar una imagen en un archivo jsp:
<img src="<c:url value="/resources/logo.png" />" alt="Idea Factory" />
En primer lugar, no sé realmente dónde almacenar los recursos (src / main / resources / public-resources? Src / main / webapp / WEB-INF / public-resources?). En segundo lugar, esta configuración no funciona, no puedo ver la imagen. Que pasa
¡Gracias!
EDIT: la solución dada aquí: Spring Tomcat y los recursos estáticos y mvc: resources tampoco funcionan ... Agregados sin éxito.
EDITAR 2: intenté eliminar la etiqueta mvc: resource y dejar solo el mvc: default-servlet-handler> one, me dio un bucle infinito y stackoverflow ... o_O ( Sirviendo contenido estático con Spring 3 )
Encontró el error:
Configuración final xxx-servlet.xml:
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/" />
Imagen en src / webapp / resources / logo.png
¡Trabajos!
Esto funciona para mi:
<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven />
La respuesta de @Nanocom funciona para mí. Puede ser que las líneas tengan que estar al final, o podría ser porque tienen que estar detrás de alguna clase de bean
como esta:
<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" />
Las recomendaciones de recursos para manejar las solicitudes HTTP GET para / resources / ** ofreciendo recursos estáticos en el directorio $ {webappRoot} / resources es simplemente agregar la siguiente línea en el archivo de configuración:
<resources mapping="/resources/**" location="/resources/" />
Esto ha funcionado para mí.
Fuentes (libro Spring in Action y http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html )
Puede mantener el directorio rsouces en el Directorio NetBeans: Páginas Web Eclipse: webapps
Archivo: 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>
Archivo: 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>
En archivo JSP
<link href="<c:url value="/resources/css/default.css"/>" rel="stylesheet" type="text/css"/>
Según lo dicho por @Nancom
<mvc:resources location="/resources/" mapping="/resource/**"/>
Así que por claridad dejamos que nuestra imagen esté en
resources/images/logo.png"
El atributo de ubicación del La etiqueta define la ubicación del directorio base de los recursos estáticos que desea servir. Puede ser una ruta de imágenes que está disponible en el directorio src/main/webapp/resources/images/
; es posible que se pregunte por qué solo hemos asignado / resources / como valor de ubicación en lugar de src / main / webapp / resources / images / . Esto se debe a que consideramos el directorio de recursos como el directorio base para todos los recursos, podemos tener varios subdirectorios en el directorio de recursos para colocar nuestras imágenes y otros archivos de recursos estáticos.
El segundo atributo, la asignación , solo indica la ruta de solicitud que debe asignarse a este directorio de recursos. En nuestro caso, hemos asignado /resources/**
como el valor de mapeo. Por lo tanto, si cualquier solicitud web comienza con la ruta /resource
solicitud de /resource
, se asignará al directorio de recursos, y el símbolo /**
indica el aspecto recursivo de cualquier archivo de recursos debajo del directorio de recursos base.
Así que para url como http://localhost:8080/webstore/resource/images/logo.png
. Por lo tanto, al atender esta solicitud web, Spring MVC considerará /resource/images/logo.png
como la ruta de solicitud. Por lo tanto, tratará de asignar /resource
al directorio base de recursos, recursos. Desde este directorio, intentará buscar la ruta restante de la URL, que es /images/logo.png
. Como tenemos el directorio de imágenes en el directorio de recursos, Spring puede localizar fácilmente el archivo de imagen desde el directorio de imágenes.
Asi que
<mvc:resources location="/resources/" mapping="/resource/**"/>
nos da para [solicitudes] dadas -> [asignación de recursos]:
http://localhost:8080/webstore/resource/images/logo.png
-> búsquedas en resource/images/logo.png
http://localhost:8080/webstore/resource/images/small/picture.png
-> búsquedas en resource/images/small/picture.png
http://localhost:8080/webstore/resource/css/main.css
-> búsquedas en resource/css/main.css
http://localhost:8080/webstore/resource/pdf/index.pdf
-> búsquedas en resource/pdf/index.pdf
También me encontré con este problema antes. Mi situación fue que no puse todos los 62 archivos de Spring Framework en el archivo lib (edición spring-framework-4.1.2.RELEASE), funcionó. Y luego también cambié el 3.0.xsd a 2.5 o 3.1 para la prueba, todo funcionó. Por supuesto, también hay otros factores que afectan su resultado.
<mvc:resources mapping="/resources/**"
location="/, classpath:/WEB-INF/public-resources/"
cache-period="10000" />
Coloque los recursos en: src/main/webapp/images/logo.png
y luego acceda a ellos a través de /resources/images/logo.png
.
En la war
se images/logo.png
en images/logo.png
. Así que la primera ubicación ( /
) de mvc:resources
los recogerá.
La segunda ubicación ( classpath:/WEB-INF/public-resources/
) en mvc:resources
(parece que usaste alguna plantilla basada en roo) puede ser para exponer recursos (por ejemplo, archivos js) desde archivos jar, si están ubicados en El directorio WEB-INF/public-resources
en el jar.