Tabla de contenido
En el desarrollo web, el elemento más básico es importar recursos estáticos, entonces, ¿cómo importar recursos estáticos en Springboot? La respuesta está en el código fuente, analicemos y analicemos ~
Primero, presione dos veces shift
para buscar la WebMvcAutoConfugure
clase en IDEA . Esta es la clase de configuración automática de webMvc. El método para procesar los recursos estáticos de springboot está en ella.
Deslizamos hacia abajo y encontramos una clase de adaptación de configuración automática de webMvc. WebMvcAutoConfigurationAdapter
Hay un addResourceHandlers
método, este Es nuestro proyecto springboot agregar un método para manejar recursos estáticos
Analicemos este código a continuación. Primero analizaremos la parte naranja del código y luego analizaremos la parte azul del código, ¡correspondiente a los dos métodos para importar recursos estáticos!
Método 1: WebJars
En el
addResourceHandlers
método, el código naranja en el ícono menciona unawebjars
cosa. Esta es la primera forma en que Springboot importa recursos estáticos. ¿Qué es esto?
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
1. ¿Qué son los webjars?
Referencia Bowen: https://www.jianshu.com/p/ca568526f0bd https://blog.coding.net/blog/spring-static-resource-process
Por lo general
web开发
, a menudo necesitamos importar algunos recursos estáticos, pero comojs
,css
,images
y otros recursos estáticos gestión es la versión caótica
Por ejemplo
Jquery
,Bootstrap
,Vue.js
otras versiones de los componentes respectivos de la estructura frontal de extremo respectiva son diferentes dependePor lo general, copiamos estos recursos web en el directorio de Java. Esta copia manual puede causar errores de versión. Si la versión de la copia es incorrecta, la página de inicio no se puede mostrar correctamente.
Entonces, ¿existe una solución como un
jar
paquete de administración de back-end ? Esto presenta la introducción de hoy.WebJars
WebJars
Proporciona archivos de recursos para proyectos web en forma de Jars y luego utiliza la gestión de estas bibliotecas dependientes en Maven para garantizar la singularidad de esta versión de recurso web.Webjars
Se utiliza principalmente paraSpring Boot
crear proyectos de microservicios basados en la necesidad de empaquetar todos los recursos en archivos jar ejecutables.
2. Uso de webjars
En cuanto a WebJars
recursos, el sitio web oficial: https://www.webjars.org/
Vamos al sitio web para encontrar los recursos que necesitamos. Cada recurso tiene sus propias coordenadas de maven. Agrega dependencias de maven a tu proyecto y puedes usarlo directamente. Estos recursos también.
Por ejemplo, aquí, la jquery
dependencia de maven importada y los jquery
recursos importados se pueden ver a la izquierda
3. Estructura de Webjars
Antes de comenzar, eche un vistazo a
Jquery
lawebjars
comprensión bajowebjars
la estructura de directorios del paquete
META-INF
└─maven
└─org.webjars
└─jquery
└─pom.properties
└─pom.xml
└─resources
└─webjars
└─jquery
└─3.5.1
└─(静态文件及源码)
4. Analizar el código fuente
Analiza el siguiente código:
//如果静态资源符合"/webjars/**"的格式
if (!registry.hasMappingForPattern("/webjars/**")) {
//添加资源注册到"/webjars/**"
customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
Si el nombre del recurso estático coincide /webjars/**
, vaya a la classpath:/META-INF/resources/webjars/
ruta para buscar, agregue el recurso a la /webjars/**
ruta, y estas dos rutas son una correspondencia:
/webjars/** ---> classpath:/META-INF/resources/webjars/
En el futuro, puede acceder directamente a los recursos estáticos accediendo directamente a ellos a través del navegador a través del formato de la ruta de registro;
Y Webjars
todos nuestros recursos se ajustan a esta estructura de ruta, por lo que solo necesitamos introducir esta coordenada a través de maven, y todos se pueden encontrar e identificar. Así es como importamos recursos estáticos.
5. Visita de prueba
A continuación, comencemos a probar si podemos acceder a recursos estáticos. El formato de acceso especificado en el código fuente /webjars/**
corresponde a la classpath:/META-INF/resources/webjars/**
ruta, aquí es:
http://localhost:8080/webjars/jquery/3.5.1/jquery.js
Puede ver el juery
archivo estático js importado
Método 2: staticPathPattern
En el
addResourceHandlers
método, el código azul en el icono es la segunda forma en que Springboot puede importar recursos estáticos.
1. Análisis del código fuente
//获取staticPathPattern
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//如果静态资源路径符合staticPathPattern的格式
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
De manera similar, primero consígalo staticPathPattern
y luego agregue recursos para registrarse en esta ruta, entonces, ¿cuál es esta ruta?
Hicimos clic getStaticPathPattern
y luego hicimos clic y staticPathPattern
descubrimos que esta ruta es /**
: es decir, podemos /**
acceder a recursos estáticos a través de este formato, entonces, ¿cuál es la ruta real correspondiente a esta ruta?
Haga clic en el código getStaticLocations()
, puede ver cuatro rutas
"classpath:/META-INF/resources/":就是上述的webjars
"classpath:/resources/":reources目录下的resources目录,不存在自己新建
"classpath:/static/":resources目录下的static目录
"classpath:/public/":resources目录下的public目录,不存在自己新建
2. Visita de prueba
Por ejemplo, colocamos public
un archivo estático en el directorio1.js
hello
Luego iniciamos el programa principal para visitar locaohost:8080/1.js
y visitamos exitosamente los recursos estáticos
Resumen : localhost:8080
Todas las rutas de recursos estáticos solicitadas debajo se encontrarán en esos cuatro directorios, que son los cuatro directorios donde se almacenan los recursos estáticos.
Podemos probar, cuando hay varios archivos estáticos con el mismo nombre existen en diferentes directorios anteriores, la prioridad: resources
> static
>public
Ruta de recursos personalizada
Al
addResourceHandlers
comienzo del método, hay tal juicio
//如果静态资源已经被自定义
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Puede application.properties
personalizar la ruta de los recursos estáticos en el, el valor predeterminado es/**
spring.mvc.static-path-pattern=/zsr/**
Por lo general, no se recomienda hacer esto, y el método 2 anterior no será válido (a menos que se defina explícitamente como /**
)