응답 - 정적 리소스, 뷰 템플릿

스프링(서버)에서 응답 데이터를 만드는 3가지 방법

  1. 정적 리소스 ex) 웹 브라우저에 정적인 HTML, css, js을 제공할 때

  2. 뷰 템플릿 사용 ex) 웹 브라우저에 동적인 HTML을 제공할 때

  3. HTTP 메시지 사용 HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터 제공

  1. 정적 리소스

정적 리소스 경로 : 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 ❌)

  1. 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