응답 - 정적 리소스, 뷰 템플릿
스프링(서버)에서 응답 데이터를 만드는 3가지 방법
정적 리소스 ex) 웹 브라우저에 정적인 HTML, css, js을 제공할 때
뷰 템플릿 사용 ex) 웹 브라우저에 동적인 HTML을 제공할 때
HTTP 메시지 사용 HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터 제공
정적 리소스
정적 리소스 경로 : src/main/resources/static 정적 리소스 생성 : src/main/resources/static/basic/hello-form.html => http://localhost:8080/basic/hello-form.html로 이동
2. 뷰 템플릿 사용 뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어서 전달한다. 일반적으로 HTML을 동적으로 생성하는 용도로 사용하지만, 뷰 템플릿이 만들 수 있는 것이라면 뭐든지 가능하다.
뷰 템플릿 경로 : src/main/resources/templates 뷰 템플릿 생성 : ex) src/main/resources/templates/response/hello.html
th:text => Model에서 "data"라는 key 값을 받아서 empty라는 텍스트 부분에 치환해서 넣어준다는 뜻이다!
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p th:text="${data}">empty</p>
</body>
</html>
뷰 템플릿을 호출하는 3가지 방법❤️⭐️ (@RestController, @ResponseBody ❌)
ModelAndView를 반환하는 컨트롤러 ModelAndView("response/hello") : 뷰의 논리 이름 넣어주며 ModelAndView 인스턴스 생성 .addObject("data","hello") : Model에 변수명(attributeName)과 변수 데이터(attributeValue) 넣어준다!
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1(){
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data","hello!");
return mav;
}
ModelAndView 구현 소스 참고

2. String을 반환하는 컨트롤러 : 반환되는 String이 뷰의 논리 이름이 된다. 메서드의 매개변수로 model을 넣어주어야 한다! model에 addAttribute로 attributeName과 attributeValue를 넣어준다!
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model){
model.addAttribute("data","hello!");//모델에 데이터 넣어준다!
return "response/hello";//@Controller이면서 String 반환 = 뷰의 논리적 이름
}
3. 리턴 타입이 void인 경우(명시성이 떨어지기 때문에 권장하지 않는다.) 요청 URL과 렌더링하려는 뷰의 논리 이름이 같으면 리턴하는 것이 없어도 된다. 요청 URL과 동일한 이름의 뷰를 랜더링한다.
@RequestMapping("/response/hello")
public void responseViewV3(Model model){
model.addAttribute("data","hello!");//모델에 데이터 넣어준다!
}
Last updated
Was this helpful?