복붙노트

[SPRING] 컨텍스트 경로로 봄 부팅 정적 컨텐트

SPRING

컨텍스트 경로로 봄 부팅 정적 컨텐트

컨텍스트 경로를 사용할 때 스프링 부트의 정적 컨텐츠에 문제가 있습니다. 즉 : localhost : 8080 / {appname} /에 앱을 배포하고 싶습니다.

컨텍스트 경로없이 응용 프로그램을 실행하면 모든 것이 잘 작동하고 Spring Boot는 (리소스 / 템플릿 /에서 Thymeleaf를 사용하여) .html 파일을 찾은 다음 JS 파일 (리소스 / 정적 / js /에서)을 추가하지만 실행할 때 문맥 패스.

server.context-path=/{appname}

또는

server.servlet-path=/{appname}

.html 페이지는 여전히 JS 파일에 의해 404 오류를 생성하여 표시됩니다.

application.properties의 spring.resources.static-locations를 변경하고 MvcConfig.class의 addResourceHandlers () 메소드를 재정의하려고했지만 어느 것도 작동하지 않는 것 같습니다.

CookieLocaleResolver와 MessageSource를 정의해야하기 때문에 MvcConfig 클래스를 사용합니다.하지만 이는 MvcConfig에있는 것입니다. @EnableWebMvc를 사용하지 않고 @ComponentScan과 함께 @SpringBootApplication 주석을 사용합니다.

어떤 도움을 주시면 감사하겠습니다 :)

해결법

  1. ==============================

    1.귀하의 의견에 따라 :

    귀하의 의견에 따라 :

    문제는 Spring에서 js를 제공하지 않기 때문에 페이지가 리소스에 대한 URL을 올바르게 작성하지 못한다는 것입니다.

    Thymeleaf는 th 속성 앞에 src 속성을 표시하여 자동으로이를 지원하는 메커니즘을 제공합니다.

    2 절 "문맥 - 상대 URL"참조 : www.thymeleaf.org/doc/articles/standardurlsyntax.html

  2. ==============================

    2.아래 예제는 스프링 부트에서 정적 리소스를 구성하는 방법을 보여줍니다.

    아래 예제는 스프링 부트에서 정적 리소스를 구성하는 방법을 보여줍니다.

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(final ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**/*.js").addResourceLocations("/ui/static/");
            registry.addResourceHandler("/**/*.css").addResourceLocations("/ui/static/");
        }
    }
    

    경로 패턴

    지정된 URL 경로 패턴을 기반으로 정적 리소스를 제공하는 리소스 처리기를 추가합니다. 핸들러는 지정된 경로 패턴 중 하나와 일치하는 모든 수신 요청에 대해 호출됩니다.

    "/ static /"또는 "/css/{filename:\w+\.css}"와 같은 패턴은 허용됩니다. 구문에 대한 자세한 내용은 ** org.springframework.util.AntPathMatcher를 참조하십시오.

    귀하의 jsp / html 보이는 아래와 같이 정적 콘텐츠를 참조하십시오

    <link href="/webAppContext/cssa/bootstrap.min.css" rel="stylesheet"/>
    <script src="/webAppContext/jquery-2.2.1.min.js"></script>
    <script src="/webAppContext/bootstrap.min.js"></script>
    

    어떤 브라우저가 정적 컨텐츠를 얻으려고 시도 하는지를 사용하는 URL

    http://localhost:8080/webAppContext/jquery-2.2.1.min.js
    http://localhost:8080/webAppContext/bootstrap.min.js
    http://localhost:8080/webAppContext/cssa/bootstrap.min.css
    
    
    server.servlet.context-path=/webAppContext is in your application.properties
    
  3. ==============================

    3.내 구성은 다음과 같습니다.

    내 구성은 다음과 같습니다.

    @Configuration
    public class MvcConfig extends WebMvcConfigurerAdapter  {
    
        public static final Logger LOG = LoggerFactory.getLogger(MvcConfig.class);
    
        @Bean
        public LocaleResolver localeResolver() {
    
            CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
            cookieLocaleResolver.setCookieName("language");
            cookieLocaleResolver.setCookieMaxAge(-1);
            cookieLocaleResolver.setDefaultLocale(Locale.FRENCH);
            return cookieLocaleResolver;
        }
    
        @Bean
        public MessageSource messageSource() {
            ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
            messageSource.setBasename("classpath:i18n/lang");
            messageSource.setDefaultEncoding("UTF-8");
            return messageSource;
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new Urli18nRewriterInterceptor());
        }   
    }
    

    및 폴더 구조 :

    폴더 구조

  4. from https://stackoverflow.com/questions/38788459/spring-boot-static-content-with-context-path by cc-by-sa and MIT license