[210530] MVC & Template Engine

MVC와 Template Engine

MVC : Model, View, Controler

예전 JSP에서는 View에서 모든 걸 구현했다(Model1 방식)
요즘에는 역할을 나누는 걸 중요시 여기게 되었다.

따라서 View 같은 경우엔 화면에 보이는 부분을 다뤄야 한다.
그리고 Controler, Model -> 비지니스 로직이나 내부적으로 처리에 집중

우선 로직부터 살펴보자

Static과는 다르게 HTML(변환 후) 즉, 렌더링을 거치게 된다.

#controller/HelloController

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloController {
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
        }
}

#resources/template/hello-template.html

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

Parameter를 받을 때 @RequestParam()

그리고 실행을 하고 localhost:8080/hello-mvc 로 접속을 하면
오류가 뜨게 되는데

2021-05-30 18:16:25.470 WARN 16576 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]

이는 @RequestParam() 부분에서 발생
required 라는 옵션이 있는데 default 값이 true로 되어있다.
-> 한 마디로 무조건 넣어야 함, required = false로 하면 안넣어도 됨

기본이 true이기 때문에 값을 넘겨야 함
->localhost:8080/hello-mvc?name=spring!!

*Parameter정보 : 컨트롤 + P


정리하면
MVC & template 방식은
template 엔진을 MVC로 쪼개서 View 부분의 html을 좀 더 프로그래밍 한 것으로 렌더링 후, 렌더링이 된 html을 고객(클라이언트)에게 전달

좋은 웹페이지 즐겨찾기