지금까지는 @ResponseBody를 이용하여 String을 HTTP 바디에 직접 넣어주거나
HttpEntity<>("OK") 식으로 넘겨주거나, response.getWriter / OutputStream을 이용하였다.
그렇다면 이제 정적 리소스와 뷰 템플릿을 이용하는 방법에 대해 알아보자
먼저 용어 정의를 명확히 할 필요가 있다.
정적 리소스 - 웹 브라우저에 정적인(렌더링 로직 X)인 HTML, CSS, JS 파일을 제공할 때는 정적 리소스를 사용
뷰 템플릿 사용 - 웹 브라우저에 특정 로직을 적용한 동적 HTML을 제공할때는 뷰 템플릿을 사용한다.
HTTP 메세지 사용
- HTTP API를 사용하는 경우에는 HTML이 아니라 데이터를 전달해야 하기 때문에, HTTP 메세지 바디에 JSON 형식으로 데이터를 실어 나른다.
정적 리소스
스프링 부트는 다음 디렉토리에 있는 정적 리소스를 제공한다
/static, /public, /resources, /META-INF/resources
src/main/resources -> 리소스를 보관하는 디렉토리, 클래스패스의 시작 경로
따라서 다음 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공함.
정적 리소스 경로
/src/main/resources/static
다음 경로에 파일이 들어있으면
src/main/resources/static/basic/hello-form.html이면
localhost:8080/hello-form.html과 같이 실행이 가능하다
뷰 템플릿
뷰 템플릿을 거쳐서 HTML이 동적으로 생성되고 뷰가 응답을 만들어서 전달한다.
일반적으로 HTML을 동적으로 생성하는 용도로 사용하나 다른 용도로도 사용 가능하다
스프링 부트는 기본적으로 뷰 템플릿 경로를 제공한다.
src/main/resources/templates
지금부터 뷰 템플릿이 사용되는 방법을 코드로 보도록 하겠다.
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;
}
@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!!");
}
}
1) String을 반환하는 경우 @ResponseBody가 없는 이상 논리 뷰의 이름으로 인식하고 뷰를 찾아 반환한다.
@ResponseBody가 있다면 HTTP 메세지 바디에 그대로 String을 입력한다.
2) HttpServletResponse, OutputStream 없이 void를 반환하는 경우 요청 URL을 참고해서 논리 뷰 이름으로 사용하는데, 명시성이 떨어지고 딱 맞는 경우도 없다. 쓰지 말자
HTTP 메세지
-> @ResponseBody, HttpEntity를 사용하면 뷰 템플릿을 사용하는 것이 아니라, HTTP 메세지 바디에 직접 응답 데이터 출력이 가능.
'스프링 공부 (인프런 김영한 선생님) > 스프링 MVC 1편' 카테고리의 다른 글
[스프링 웹 MVC 1편] 26. HTTP 메세지 컨버터 (0) | 2023.06.04 |
---|---|
[스프링 웹 MVC 1편] 25. HTTP 응답 - HTTP API, 메세지 바디에 직접 입력 (0) | 2023.06.04 |
[스프링 웹 MVC 1편] 23. HTTP 요청 파라미터 (JSON) (0) | 2023.06.03 |
[스프링 웹 MVC 1편] 22. HTTP 요청 파라미터 (@ModelAttribute, 단순 텍스트) (0) | 2023.06.03 |
[스프링 웹 MVC 1편] 21. 스프링 MVC - 기본기능 (기본/헤더/쿼리파라미터/ HTML Form 조회) (1) | 2023.06.03 |