관리 메뉴

샐님은 개발중

8. HTTP 응답 - 정적 리소스, 뷰 템플릿 본문

스프링 MVC 1편 -인프런 김영한/섹션6-스프링MVC - 기본 기능

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

샐님 2023. 7. 10. 20:05
728x90
반응형

스프링 (서버)에서 응답 메시지를 만드는 3가지 방법

정적 리소스

     예) 웹 브라우저에 정적인 HTML, css, js제공 .

뷰 템플릿 사용

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

HTTP 메시지 사용

        HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로,

       HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다

 

1. String을 반환하는 경우

   - View or HTTP 메시지 @ResponseBody 가 없으면 response/hello 로 뷰 리졸버가 실행되어서 뷰를 찾고, 렌더링 한다.           @ResponseBody 가 있으면 뷰 리졸버를 실행하지 않고, HTTP 메시지 바디에 직접 response/hello 라는 문자가 입력된다.

여기서는 뷰의 논리 이름인 response/hello 를 반환하면 다음 경로의 뷰 템플릿이 렌더링 되는 것을 확인할 수 있다.

실행: templates/response/hello.html

 

2. Void를 반환하는 경우

 -  @Controller 를 사용하고, HttpServletResponse , OutputStream(Writer) 같은 HTTP 메시지 바디를 처리하는 파라미터가 없으면 요청 URL을 참고해서 논리 뷰 이름으로 사용

    요청 URL: /response/hello 실행: templates/response/hello.html 참고로 이 방식은 명시성이 너무 떨어지고 이렇게 딱 맞는 경우도 많이 없어서, 권장하지 않는다.

 

3. HTTP 메시지 @ResponseBody , HttpEntity 를 사용하면, 뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 응답 데이터를 출력할 수 있다.

 

package hello.springmvc.basic.response;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ResponseViewController {

    @RequestMapping("/response-view-v1")
    public ModelAndView responseViewV1(){
        ModelAndView mav = new ModelAndView("response/hello")
                .addObject("data","hello!");

                return mav;

    }

    //String을 반환하는 경우 - View or HTTP 메시
    @RequestMapping("/response-view-v2")
    public String responseViewV2(Model model){

        model.addAttribute("data","hello");
        return "response/hello";

    }

    // 권장하지 않음
    @RequestMapping("/response/hello") // 스프링이 관례적으로 논리적 뷰이름으로 매칭해줌
    public void responseViewV3(Model model){

        model.addAttribute("data","hello");

    }
}

 

Thymeleaf 는 기본적으로 응답 화면으로 등록되어있다. 변경하고 싶으면  application.properties 에서 변경가능하다.

spring.thymeleaf.prefix=classpath:/templates/

spring.thymeleaf.suffix=.html

728x90
반응형