programing

Spring-Boot Jersey: Jersey가 정적 콘텐츠를 제공하도록 허용

magicmemo 2023. 6. 25. 18:37
반응형

Spring-Boot Jersey: Jersey가 정적 콘텐츠를 제공하도록 허용

애플리케이션은 JDK 8, Spring Boot & Spring Boot Jersey 스타터를 사용하며 WAR로 패키지되어 있습니다(Spring Boot Maven 플러그인을 통해 로컬로 실행됨).

제가 하고 싶은 것은 (빌드 시) 즉시 생성하는 문서를 환영 페이지로 받는 것입니다.

여러 가지 접근 방식을 시도했습니다.

  1. Jersey가 설정을 통해 정적 콘텐츠를 제공하도록 허용application.properties 여기설명적절한 init 파라미터
  2. a를 소개합니다.metadata-complete=false web.xml생성된 HTML 문서를 시작 파일로 나열합니다.

아무 것도 안 풀렸어요.

정적 파일을 제공하기 위해 Spring MVC를 활성화하거나 Jersey 리소스를 생성하는 것을 피하고 싶습니다.

감 잡히는 게 없어요?

다음은 Jersey 구성 클래스입니다(추가하지 못했습니다).ServletProperties.FILTER_STATIC_CONTENT_REGEX해당):

@ApplicationPath("/")
@ExposedApplication
@Component
public class ResourceConfiguration extends ResourceConfig {

   public ResourceConfiguration() {
      packages("xxx.api");
      packages("xxx.config");
      property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
      property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
   }
}

그리고 여기는 Spring Boot 응용 프로그램 클래스입니다. (나는 추가를 시도했습니다.)application.properties와 함께spring.jersey.init.jersey.config.servlet.filter.staticContentRegex=/.*html하지만 작동하지 않았습니다. 여기에 속성 키가 정확히 무엇인지 모르겠습니다.):

@SpringBootApplication
@ComponentScan
@Import(DataConfiguration.class)
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

먼저, 정적 콘텐츠가 제공되지 않는 이유는 Jersey 서블릿의 기본 서블릿 매핑 때문입니다./*그리고 모든 요청을 독차지합니다.따라서 정적 콘텐츠를 제공하는 기본 서블릿에 연결할 수 없습니다.아래 솔루션 외에 다른 솔루션은 서블릿 매핑을 간단히 변경하는 것입니다.당신은 그것을 주석을 달아서 할 수 있습니다.ResourceConfig와의 하위 클래스.@ApplicationPath("/another-mapping")또는 설정합니다.application.properties소유물spring.jersey.applicationPath.


당신의 첫 번째 접근법과 관련하여, 저지를 살펴보십시오.구성하려는 속성은 입니다.다음과 같이 표시됩니다.

이 속성은 Jersey 서블릿 컨테이너가 필터로 실행되도록 구성된 경우에만 적용됩니다. 그렇지 않으면 이 속성이 무시됩니다.

Spring Boot은 기본적으로 Jersey 서블릿 컨테이너를 서블릿으로 구성합니다(여기에 언급됨).

기본적으로 저지는 서블릿으로 설정됩니다.@Bean유형의ServletRegistrationBean이름 지어진jerseyServletRegistration같은 이름의 빈을 만들어 해당 빈을 비활성화하거나 재정의할 수 있습니다.또한 설정을 통해 서블릿 대신 필터를 사용할 수 있습니다(이 경우에는@Bean대체하거나 재정의하는 것은jerseyFilterRegistration).

그러니 그냥 속성을 설정하세요.spring.jersey.type=filter의 신의에application.properties이것을.제가 테스트해 봤습니다.

그리고 참고로 서블릿 필터로 구성하든 서블릿으로 구성하든 Jersey에 관한 한 기능은 동일합니다.

별로는을 에, 사하것보다용도것▁as다보▁the는▁rather.FILTER_STATIC_CONTENT_REGEX모든 정적 파일을 처리하기 위해 복잡한 정규식을 설정해야 하는 경우 를 사용할 수 있습니다.이것은 사실 제가 실험하던 것입니다.그냥 내 방에 설치했어요.ResourceConfig

@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        packages("...");
        property(ServletProperties.FILTER_FORWARD_ON_404, true);
    }
}

여전히 이것을 작동시킬 수 없는 사람들을 위해, 저는 @peeskillet이 제공한 답을 따라 추가로 변경해야 했습니다.

는 이전에 저다방는음만들다니습에서 을 만든 적이 .Application.java.

@Bean
public ServletRegistrationBean jerseyServlet() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(), "/*");
    registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName());
    return registration;
}

는 이것이 문는이서등것는다입니다록에 입니다./* 경그리고합를저설정니다지로니다▁path▁jersey▁the설합,정▁and.ResourceConfig구성 파일.

일단 위의 방법을 제거하고, 다음을 배치했습니다.@Configuration나의 의주에 .ResourceConfig클래스, Spring Boot을 통해 정적 리소스를 검색할 수 있음을 알게 되었습니다.

은 저의 완를위해나이, 의 입니다.ResourceConfig지금이다.

@Configuration
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        // Application specific settings
        property(ServletProperties.FILTER_FORWARD_ON_404, true);
    }
}

이 블로그 게시물은 다른 접근 방식을 결정하는 데 도움이 되었습니다.ResourceConfig.

아래 설정이 작동했습니다.

세트

spring .jersey.type: filter

FILTER_FORWARD_ON_404 설정

@Configuration 
        public class MyResourceConfig extends ResourceConfig  {

            public MyResourceConfig () {
                try {
                    register(XXX.class);
                    property(ServletProperties.FILTER_FORWARD_ON_404, true);

                } catch (Exception e) {
                    LOGGER.error("Exception: ", e);                   
                }
            }       

        } 

참고: @component 대신 @Configuration을 사용합니다.

언급URL : https://stackoverflow.com/questions/29658240/spring-boot-jersey-allow-jersey-to-serve-static-content

반응형