1. 概述
有时,我们必须在Web应用程序中提供静态资源。它可能是图像、HTML、CSS或JavaScript文件。
在本教程中,我们将展示如何使用Spring WebFlux提供静态内容。我们还假设我们的Web应用程序将使用Spring Boot进行配置。
2. 覆盖默认配置
默认情况下,Spring Boot从以下位置提供静态资源:
- /public
- /static
- /resources
- /META-INF/resources
来自这些路径的所有文件都在/[resource-file-name]路径下提供。
如果我们想更改Spring WebFlux的默认路径,我们需要将此属性添加到我们的application.properties文件中:
# Use in Static content Example
spring.webflux.static-path-pattern=/assets/**
现在,静态资源将位于/assets/[resource-file-name]下。
请注意,当存在@EnableWebFlux注解时,这将不起作用。
3. 路由示例
也可以使用WebFlux路由机制来提供静态资源。
让我们看一个为index.html文件提供服务的路由定义示例:
@Configuration
public class StaticContentConfig {
@Bean
public RouterFunction<ServerResponse> htmlRouter(@Value("classpath:/public/index.html") Resource html) {
return route(GET("/"),
req -> ok().contentType(MediaType.TEXT_HTML).bodyValue(html));
}
}
我们还可以在RouterFunction的帮助下从自定义位置提供静态内容。
让我们看看如何使用/img/**路径从src/main/resources/img目录提供图像:
@Bean
public RouterFunction<ServerResponse> imgRouter() {
return resources("/img/**", new ClassPathResource("img/"));
}
4. 自定义Web资源路径示例
另一种提供存储在自定义位置的静态资源的方法是使用maven-resources-plugin和一个额外的Spring WebFlux属性,而不是默认的src/main/resources路径。
首先,让我们将插件添加到我们的pom.xml中:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/assets</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${basedir}/target/classes/assets</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
然后,我们只需要设置static-locations属性:
spring.resources.static-locations=classpath:/assets/
在这些操作之后,index.html将在http://localhost:8080/index.html URL下可用。
5. 总结
在本文中,我们学习了如何在Spring WebFlux中提供静态资源。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章