정적 콘텐츠 처리하는 ResourceHandler?
이 글의 목적?
스프링에서는 HTML과 같은 정적인 콘텐츠들 어떻게 처리할까?
ResourceHandler?
이 Handler는 이미지, 자바스크립트, CSS, HTML 같은 정적인 리소스를 처리한다. 톰캣, 네티 등과 같은 서블릿 컨테이너에는 모두 정적인 리소스를 처리할 디폴트 서블릿을 기본적으로 제공하고 있다.
스프링은 정적인 리소스를 이 디폴트 서블릿에 요청을 위임하여 처리를 하는데, 문제는 이 디폴트 서블릿이 모든 요청을 가로챌 경우에 직접 만든 Handler가 먼저 찾아지는게 아닌 정적인 리소스가 먼저 찾아지게 된다. 따라서 ResourceHandler의 경우 가장 낮은 우선 순위로 등록이 된다.
스프링 부트는 아무런 설정을 하지 않아도 'resource/static' 폴더나 'resource/public' 폴더로 ResourceHandler를 제공한다. 스프링에서 제공하는 것이 아닌 커스텀 ResourceHandler를 사용하고자 할 때는 WebConfigurer 인터페이스에서 추가해주면 된다. 그리고 ResourceHandler를 등록할 때 다양한 캐시 전략을 설정하여 효율성을 증가시킬 수 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/mobile/**")
.addResourceLocations("classpath:/mobile/")
.setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
// // 캐시를 사용할지 말지를 결정. 운영중이라면 true, 개발중이라면 false가 적절
// .resourceChain(true)
// // 요청에 해당하는 리소스를 찾는 방법
// .addResolver()
// // 응답으로 내보낼 리소스를 변경하는 방법
// .addTransformer()
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SimpleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void helloStatic() throws Exception {
// 기본 ResourceHandler
// this.mockMvc.perform(get("/index.html"))
// .andDo(print())
// .andExpect(status().isOk())
// .andExpect(content().string(Matchers.containsString("index")));
// 직접 만든 ResourceHandler
this.mockMvc.perform(get("/mobile/index.html"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(Matchers.containsString("mobile")))
.andExpect(header().exists(HttpHeaders.CACHE_CONTROL));
}
}
이 글의 레퍼런스
- 백기선님의 스프링 웹 MVC
Author And Source
이 문제에 관하여(정적 콘텐츠 처리하는 ResourceHandler?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@maketheworldwise/정적-콘텐츠-처리하는-ResourceHandler
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(정적 콘텐츠 처리하는 ResourceHandler?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@maketheworldwise/정적-콘텐츠-처리하는-ResourceHandler저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)