【spring boot】支持webjars

前言

  • spring boot 2.4.3

spring boot 支持webjars

通过添加 ResourceHandlerRegistry 实现。有两种方式可以实现:

  1. spring boot默认对webjars提供支持。
  2. 手动添加对webjars的支持。

参考WebMvcConfigurationSupport

spring boot默认对webjars提供支持

WebMvcAutoConfiguration类自动配置时,添加了对webjars的支持。

		@Override
		protected void addResourceHandlers(ResourceHandlerRegistry registry) {
			super.addResourceHandlers(registry);
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			ServletContext servletContext = getServletContext();
			addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
			addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				registration.addResourceLocations(this.resourceProperties.getStaticLocations());
				if (servletContext != null) {
					registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
				}
			});
		}

WebMvcAutoConfiguration类自动配置的起效条件:

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
		ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {
	...
}

当满足WebMvcAutoConfiguration类自动配置的起效条件时,默认对webjars提供支持。当你引入的jar中,有付合webjars规则的,就可以通过webjars访问到。比如:http://localhost:8080/webjars/jquery/3.1.1/jquery.min.js

当不满足WebMvcAutoConfiguration类自动配置的起效条件时,不支持webjars。此时,需要手动添加对webjars的支持。

手动添加对webjars的支持

假如你按照某个教程自定义一个WebMvcConfigurationSupport,并得到了想要的功能时,WebMvcAutoConfiguration将不会起效。此时,如果还需要对webjars的支持,就需要手动添加对webjars的支持。(ps:尽量不要自定义WebMvcConfigurationSupport,让WebMvcAutoConfiguration起效。WebMvcAutoConfiguration不起效后,那WebMvcAutoConfiguration中提供的默认配置就不起效。此种情况下,你需要手动添加那些本该默认提供的功能。另,大多数时候,你自定义WebMvcConfigurationSupport得到的功能,其实有另外一种方法。)

  1. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.3</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo-1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo-1</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- spring-boot-devtools -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional> <!-- 表示依赖不会传递 -->
		</dependency>

		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>bootstrap</artifactId>
			<version>3.3.7-1</version>
		</dependency>
		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>jquery</artifactId>
			<version>3.1.1</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  1. 自定义WebMvcConfigurationSupport,添加 ResourceHandlerRegistry 实现。
@Configuration
// 此时,WebMvcAutoConfiguration将不会起效
public class CustomWebMvcConfiguration extends WebMvcConfigurationSupport {
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		if (!registry.hasMappingForPattern("/webjars/**")) {
	        registry.addResourceHandler("/webjars/**").addResourceLocations(
	                "classpath:/META-INF/resources/webjars/");
	    }
	}
}
  1. 启动项目后,访问地址:http://localhost:8080/webjars/jquery/3.1.1/jquery.min.js
    在这里插入图片描述
    如果想要了解的更多,可以参考这里

参考

https://spring.io/blog/2014/01/03/utilizing-webjars-in-spring-boot
https://blog.coding.net/blog/spring-static-resource-process

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值