2011-03-28 26 views
23

en una aplicación web, necesito servir contenidos estáticos (imágenes) ubicados fuera del directorio de contexto de la aplicación. La arquitectura general de la aplicación requiere que use Tomcat para realizar esto. Pensé que podría beneficiarme de Spring <mvc:resources> para configurar una asignación entre las URL de las aplicaciones y el contenido del directorio. Pero AFAIK es el atributo mapping solo maneja las asignaciones relacionadas con el contexto o classpath. Por lo tanto, lo que me gustaría utilizar:Spring: al servicio de recursos estáticos fuera de la raíz de contexto

<mvc:resources location="/images/**" mapping="/absolute/path/to/image/dir"/> 

no funciona. Como prefiero evitar escribir un simple servlet de transferencia de archivos, me alegraría si alguien pudiera darme algunos consejos sobre soluciones/soluciones provisionales basadas en Spring.

Muchas gracias.

Homero

Respuesta

33

<mvc:resources> puede servir recursos desde el exterior, es necesario utilizar el habitual Spring resource path syntax:

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/> 
+1

Entonces debo haber entendido mal algo. De hecho, traté de usar el prefijo 'file:'. Y, al rastrear una solicitud a un recurso estático, noté en los registros que Spring precedió una barra inclinada, lo que dio como resultado la siguiente asignación: '/ file:/absolute/path/to/image/dir'. Huelga decir que esto intenta hacer un mapa de algo en el contexto raíz, que no existe. Me temo que no puedo hacer uso de tu sugerencia. – Homer

+0

@Homer: confundiste 'mapping' con' location', mira la actualización. – axtavt

+3

Hmm. Debería haber vuelto a leer el ejemplo antes de publicar :(. Mezclé los atributos 'mapping' y' location'. Lástima de mí. Gracias por su respuesta axtavt. Señaló dónde me equivoqué, y me hizo arreglar mi error. Las cosas funcionan como esperaba ahora. – Homer

2

hay uno más simple corrección

el código debe ser

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/>

¿Notaste la diferencia? Debe colocar '/' al final de la ruta absoluta.

o puede utilizar la configuración de Java

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    String rootPath = System.getProperty("user.home"); 
    String imagePath = "file:"+rootPath + File.separator + "tmpFiles/"; 
    System.out.println(imagePath); 
    registry.addResourceHandler("/resources/**").addResourceLocations("resources/"); 
    registry.addResourceHandler("/tmpFiles/**").addResourceLocations(imagePath); 
} 

Su trabajo para mí.

Cuestiones relacionadas