Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- SpringBoot
- SW설계
- Value Object(VO)
- 구글캘린더 검색
- docker 네트워크
- sonoff
- ASUS 공유기
- LAN WAN
- SI와 SM 차이점
- 자바개발
- 실해하지 않는
- 자바스크립트 JQuery
- LG그램2017
- 네트워크 기본개념
- Data Transfer Object(DTO)
- 객체설계
- CBD 단점
- SW분석
- Tomcat error-page version
- 경력개발자
- 자바튜닝
- EXK
- USB-C충전
- maven #junit
- angular 6
- open cursors
- tvheadend
- 프로젝트관리
- 소프트웨어설계
- USB-C to HDMI 아답터
Archives
- Today
- Total
대빵's Blog
SpringBoot 3.3.2 에서 정적컨텐츠 활성화 하기 본문
개발환경
- Java : JDK17
- SpringBoot : 3.3.2
- IDE : Intellij
문제상황
- resources/static 경로에 있는 css, image 파일들이 thymeleaf 에서 적용되지 않음
- css 소스파일 경로 : resources/static/css/xxx.css
- image 소스파일 경로 : resources/static/images/xxx.jpg
- 크롬에서 404 발생하고 ERR_ABORT 로 에러로그가 보여짐(Not-Found 가 아님)
원인분석
- org.springframework.boot.autoconfigure.web.WebProperties 가 해당기능에 관여하는 소스코드임을 확인
- Code
@ConfigurationProperties("spring.web") public class WebProperties { private Locale locale; private LocaleResolver localeResolver; private final Resources resources; .. 중략 public static class Resources { private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}; ... 중략 } ...중략 }
문제해결
- ConfiguraitonProperties 가 spring.web 으로 시작하는 것을 확인
- 인터넷 상에서는 spring.mvc.static-path-pattern 에 classpath:/static/ 을 넣으라 되어 있지만 내 경우는 넣어도 작동되지 않았음
- 아래처럼 변경하여 적용함 -> 정상작동 확인
web: resources: static-locations: classpath:/static/
추가확인
- 위의 WebProperties 코드에 보면 "classpath:/static/" 이 default 로 들어 있기 때문에 어디선가 자동으로 적용하는 방법이 있을 것으로 생각함
- @AutoConfiguration 을 활성화 하면 application.yml 에 별도로 static 경로를 지정하지 않아도 default static 경로가 적용되는 것을 확인함
결론
- @AutoConfiguration 을 적용하거나, application.yml 에 별도로 spring.web.resources.static-locations 를 지정해야 정적컨텐츠에 접근이 가능했음.
추가
- Annotation 이나 appcliation.yml 에 메타정보 인식 방식으로 하지 않고 아래처럼 JavaConfig 로 구현해도 됨
- Code
package com.demo.uam.common.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); } }
'개발관련' 카테고리의 다른 글
Event-Driven Architecture(EDA) 란? (0) | 2022.06.06 |
---|---|
MSA(Micro Service Architecture) 서비스 사이즈에 대한 고찰 (0) | 2022.05.29 |
gradle manually install (gradle 수동설치) (0) | 2022.04.17 |
gradle dependencies 확인하기 (0) | 2022.04.17 |
gradle executable jar 만들기 (0) | 2021.12.07 |