Spring MVC 설정 3번째 포스팅입니다. 이번시간에는 Resource Handler
가 무엇이고, 설정하는 방법에 대해서 알아보겠습니다.
1. Resource Handler란?
Resource Handler란 이미지, javascript, css, html 등의
정적인 리소스에 대한 요청을 처리하는 것입니다.
1.1 DefaultServlet 이란?
하지만 서블릿 컨테이너(톰캣 , 제티 등)
에는 이미 정적인 자원들에 대한 요청을 처리할 수 있는 DefaultServlet
이란 것을 제공하고 있습니다.
ServletContainer 설정 파일들 중 web.xml
을 열어보겠습니다.
위와 같이 default라는 이름으로 DefaultServlet이 이미 등록되어있는 것을 볼 수 있습니다. servlet-mapping을 보시면 url mapping이 /
부터 되어있는데요, 이렇게 된다면 모든 요청을 이 servlet이 가져가지 않냐고 생각하실 수 있습니다만, 이 핸들러는 가장 낮은 우선순위
로 등록이 됩니다.
2. ResourceHandler 설정 방법
2.1 SpringBoot의 기본 ResourceHandler
우선 Spring Boot를 사용하고 계신다면 기본적으로 등록된 핸들러에 의해 /static/ 이하에 정적자원들을 응답할 수 있고, 캐싱까지 지원이 됩니다.
우선 resources/static/ 하위에 hello.html을 만들고 위와 같이 작성합니다.
SpringRunner.class) (
public class ResourceHandlerTest {
MockMvc mockMvc;
public void helloindex_파일요청() throws Exception{
mockMvc.perform(get("/index.html"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(Matchers.containsString("index")));
}
}
위와같이 간단한 테스트를 통해 정적자원을 요청해봅니다.
성공했습니다.
2.2 Spring MVC ResourceHandler 설정방법
하지만 Spring MVC에 대해 알아 보는중이기 때문에 직접 ResourceHandler를 등록하는 방법을 알아보겠습니다.
등록방법은 위와 같습니다. WebMvcConfigurer를 구현하고 addResourceHandlers
메소드를 오버라이딩 합니다. 그후 registry를 이용해 핸들러를 등록하면 됩니다.
addResourceHandler()
addResourceHandler에는 사용자의 요청을 Resource로 맵핑할 경로를 적어주면 됩니다. /mobile/**
의 의미는 유추가 가능하듯, /mobile/ 이하로 오는 모든 요청을 resourceHandler에서 처리하겠다는 의미입니다.
addResourceLocations()
이 메소드는 요청에 맵핑될 정적자원들의 위치를 지정하는 메소드입니다.
setCacheControl()
정적자원에 대한 캐싱관련 설정을 위한 메소드입니다. 위그림의 경우 10분간 캐싱을 한다는 의미 입니다.
위에서 설정한 경로에 hello.html 파일을 생성합니다.
xxxxxxxxxx
public void mobile_경로의_파일요청() throws Exception{
mockMvc.perform(get("/mobile/hello.html"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(Matchers.containsString("MOBILE")))
.andExpect(header().exists(HttpHeaders.CACHE_CONTROL));
}
테스트를 위해 위와같이 코드를 작성합니다. 기대하는 응답코드는 200이며, MOBILE이란 글자를 포함한 응답, 그리고 header에는 CACHE에대한 설정이 존재해야합니다.
성공입니다.
3. 추가적으로 공부해야 할 것
DefaultServlet
- 서블릿 컨테이너에서 제공해주는 기본 ResourceHandler
ResourceResolver
- 요청에 해당하는 리소스를 찾는 전략
ResourceTransformer
- 응답으로 보낼 리소스를 수정하는 전략
'FrameWork > Spring MVC' 카테고리의 다른 글
SpringMVC - 핸들러 메소드 - 1 (Mapping 어노테이션, 확장자, 요청헤더) (1) | 2019.05.16 |
---|---|
SpringMVC - Spring Mvc, H2, JPA, MyBatis 연동 환경 구성하기 (2) | 2019.05.13 |
SpringMVC - Spring MVC 설정 - 2 (Formatter) (0) | 2019.05.10 |
SpringMVC - Spring MVC 설정 - 1 (자주 설정되는 것들) (0) | 2019.05.05 |
SpringMVC - Spring MVC 동작원리 - 8 (Spring MVC 설정방법 @EnableWebMvc, WebConfigurer) (0) | 2019.05.02 |