Después de de una extensa selección de información hemos podido solucionar esta traba que pueden tener algunos los lectores. Te compartimos la respuesta y nuestro objetivo es serte de mucha apoyo.
Solución:
Los archivos estáticos se deben servir desde los recursos, no desde el controlador.
Spring Boot agregará automáticamente static recursos web ubicados dentro de cualquiera de los siguientes directorios:
/META-INF/resources/ /resources/ /static/ /public/
referencias:
https://spring.io/blog/2013/12/19/serving-static-web-contenido-con-spring-boot
https://spring.io/guides/gs/serving-web-content/
En bota de primavera, /META-INF/resources/
, /resources/
, static/
y public/
directorios están disponibles para servir static contenido.
Así que puedes crear un static/
o public/
directorio bajo resources/
directorio y pon tu static contenidos allí. Y serán accesibles por: http://localhost:8080/your-file.ext
. (suponiendo que server.port
es 8080)
Puede personalizar estos directorios usando spring.resources.static-locations
en el application.properties
.
Por ejemplo:
spring.resources.static-locations=classpath:/custom/
Ahora puedes usar custom/
carpeta debajo resources/
servir static archivos
Actualizar:
Esto también es posible usando la configuración de Java:
@Configuration
public class StaticConfig implements WebMvcConfigurer
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/custom/");
Esta confugracion mapea contenidos de custom
directorio a la http://localhost:8080/static/**
dirección URL
estoy usando :: Spring Boot :: (v2.0.4.
RELEASE
) with Spring Framework 5
Spring Boot 2.0 requiere Java 8 como versión mínima. Muchas API existentes se han actualizado para aprovechar las características de Java 8, como: métodos predeterminados en las interfaces, devoluciones de llamadas funcionales y nuevas API como javax.time.
Contenido estático
Por defecto, Spring Boot sirve static contenido de un directorio llamado /static (o /público o /recursos o /META-INF/resources) en el classpath o desde la raíz del ServletContext. Utiliza ResourceHttpRequestHandler de Spring MVC para que pueda modificar ese comportamiento agregando su propio WebMvcConfigurer
y anulando el addResourceHandlers
método.
De forma predeterminada, los recursos se asignan en /**
y ubicado en /static
directorio. Pero puedes personalizar el static loactions programáticamente dentro de nuestra clase de configuración de contexto web.
@Configuration @EnableWebMvc
public class Static_ResourceHandler implements WebMvcConfigurer
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
// When overriding default behavior, you need to add default(/) as well as added static paths(/webapp).
// src/main/resources/static/...
registry
//.addResourceHandler("/**") // « /css/myStatic.css
.addResourceHandler("/static/**") // « /static/css/myStatic.css
.addResourceLocations("classpath:/static/") // Default Static Loaction
.setCachePeriod( 3600 )
.resourceChain(true) // 4.1
.addResolver(new GzipResourceResolver()) // 4.1
.addResolver(new PathResourceResolver()); //4.1
// src/main/resources/templates/static/...
registry
.addResourceHandler("/templates/**") // « /templates/style.css
.addResourceLocations("classpath:/templates/static/");
// Do not use the src/main/webapp/... directory if your application is packaged as a jar.
registry
.addResourceHandler("/webapp/**") // « /webapp/css/style.css
.addResourceLocations("/");
// File located on disk
registry
.addResourceHandler("/system/files/**")
.addResourceLocations("file:///D:/");
http://localhost:8080/handlerPath/resource-path+name
/static /css/myStatic.css
/webapp /css/style.css
/templates /style.css
En Spring, todas las solicitudes pasarán por DispatcherServlet. Para evitar la solicitud de archivos estáticos a través de DispatcherServlet (controlador frontal), configuramos el contenido estático de MVC.
Como @STEEL
dijo static los recursos no deben pasar por Controller. Thymleaf
es un ViewResolver que toma el controlador de forma de nombre de vista y agrega prefix
y suffix
a Ver capa.