지금까지는 HttpRequest에 대해서 다루는 방법을 알아보았다.
Request를 통해 데이터가 들어오면 Controller에서는 매핑을 통해 제일 먼저, RequestParam이나 body의 json 데이터를 받고, 처리 후 view나(return "view") json, text 등(@ResponseBody)을 반환한다. 이때, 반환하는 view는 정적, 혹은 동적으로 반환될 수 있는데, 이것을 알맞게 응답해주는 방법을 알아볼 것이다.
1. 정적 resource(view)
스프링의 파일 구조를 보면, src/main/resources가 있다.
resources아래에는 static과 templates가 있는데,
-static : 정적 view가 들어갈 수 있음
-templates : 동적 view가 들어갈 수 있음
이런 식으로 view들을 넣어주면 된다.
static에 basic 폴더를 만들어 준 후 hello-form.html을 만들어보았다.
이때, url은 localhost:8080/basic/hello-form.html 으로 한다.
2. 동적 resource(view)
templates에 들어가는 view는 html파일에 thymeleaf라는 엔진이 추가된다.
다음 코드는 thymeleaf를 사용한 동적 html파일이다.
<hello.html>
<!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>
<html xmlns:th="http://www.thymeleaf.org">라고 타임리프를 사용할 것이라고 선언해주었다.
그 후 보이는 점은 th: text="${data}"이다.
컨트롤러에서 data라는 데이터를 가져와 띄워주는 것인데, 그 방법을 이제부터 알아보겠다.
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!");
}
}
위의 코드는 thymeleaf인 동적 html파일을 컨트롤러에 의해 정상적으로 작동하게 하기 위한 response 코드이다.
1. ModelAndView를 통해 전달하기
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1(){
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
ModelAndView라는 객체는 모델(데이터)과 view(url)을 포함한다. addObject로 데이터를 넣고 생성자에는 url을 넣어주면된다.
2. @Controller를 통해 생성된 Model객체를 통해 전달하기
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model){
model.addAttribute("data", "hello!");
return "response/hello";
}
Model을 파라미터로 받아준다. 스프링은 그럼 요청때마다 생성되는 Model객체를 적절히 받아서 파라미터로 넣어준다. 그 후 데이터를 addAtrribute로 넣고 넘겨줄 수 있다.
3. 마지막 방법은 보기만 하자. 잘 사용되지 않는다.
위에 코드들을 보면 의문점을 하나 갖게 될 것이다. 그것은 바로, "parameter로 넘어오는 model이나, HttpEntity같은 객체들은 도데체 어떤 것이 생성하고 넘겨주는 것일까?"이다. 이것은 argument resolver라는 놈이 해주는데, 이 과정은 다음 글에서 알아보도록 하자.
<본 글은 김영한님의 강의를 듣고 작성되었습니다.>
'스프링 프레임 워크' 카테고리의 다른 글
웹 서버, WAS, 서블릿(spring mvc를 시작하기에 앞서) (0) | 2023.10.26 |
---|---|
스프링 mvc의 전체적인 동작 과정(argument resolver, returnvalue handler) (0) | 2023.10.10 |
HTTP 요청 메시지(데이터를 다루기) (0) | 2023.10.05 |
HTTP 요청 파라미터(데이터를 다루기) (0) | 2023.09.27 |
요청 매핑 (0) | 2023.09.19 |