1.  개요

때로는 웹 애플리케이션에서 정적 콘텐츠를 제공해야 합니다. 이미지, HTML, CSS 또는 JavaScript 파일일 수 있습니다.

이 예제에서는 Spring WebFlux 를 사용하여 정적 콘텐츠를 제공하는 방법을 보여줍니다 . 또한 웹 애플리케이션이 Spring Boot 를 사용하여 구성된다고 가정합니다 .

2. 기본 구성 재정의

기본적으로 Spring Boot는 다음 위치에서 정적 콘텐츠를 제공합니다.

  • /공공의
  • /공전
  • /자원
  • /META-INF/자원

이러한 경로의 모든 파일은 /[resource-file-name]  경로 아래에 제공됩니다.

Spring WebFlux의 기본 경로를 변경하려면 이 속성을 application.properties 파일에 추가해야 합니다.

spring.webflux.static-path-pattern=/assets/**

이제 정적 리소스는  /assets/[resource-file-name] 아래에 있습니다.

@EnableWebFlux 어노테이션이 있으면 작동 하지 않습니다 .

3.  라우팅 예

WebFlux 라우팅 메커니즘을 사용하여 정적 콘텐츠를 제공하는 것도 가능합니다.

index.html 파일 을 제공하기 위한 라우팅 정의의 예를 살펴보겠습니다 .

@Bean
public RouterFunction<ServerResponse> htmlRouter(
  @Value("classpath:/public/index.html") Resource html) {
    return route(GET("/"), request
      -> ok().contentType(MediaType.TEXT_HTML).syncBody(html)
    );
}

RouterFunction 의 도움으로 사용자 지정 위치에서 정적 콘텐츠를 제공할 수도 있습니다 .

/img/** 경로 를 사용하여 src/main/resources/img 디렉토리 에서 이미지를 제공하는 방법을 살펴보겠습니다 .

@Bean
public RouterFunction<ServerResponse> imgRouter() {
    return RouterFunctions
      .resources("/img/**", new ClassPathResource("img/"));
}

4.  사용자 지정 웹 리소스 경로 예

기본 src/main/resources 경로 대신 사용자 지정 위치에 저장된 정적 자산을 제공하는 또 다른 방법 은 maven-resources-plugin 및 추가 Spring WebFlux 속성을 사용하는 것입니다.

먼저 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>

그런 다음 정적 위치 속성을 설정하기만 하면 됩니다.

spring.resources.static-locations=classpath:/assets/

이러한 작업 후에  index.htmlhttp://localhost:8080/index.html URL에서 사용할 수 있습니다.

5.  결론

이 기사에서는 Spring WebFlux에서 정적 컨텐츠를 제공하는 방법을 배웠습니다.

항상 그렇듯이 제시된 샘플 코드는 GitHub에서 사용할 수 있습니다 .

Generic footer banner