스프링부트

Mac IntelliJ 스프링부트 웹 개발 MVC, 템플릿 엔진

하이자바 2024. 3. 6. 16:37

웹 기발을 하는 방법 세 가지가 있다.

정적 컨텐츠

MVC와 템플릿 엔진

 

정적 컨텐츠는 앞서 다룬 페이지 만들기에서 다뤄보았다.

static 폴더 안에 html을 만들어 서버에 전달하여 웹 페이지를 보여주었던 방식이다.

 

MVC 그리고 템플릿 엔진은 

MVC는 모델, 뷰, 컨트롤러이다. 

컨트롤러는 우리가 만든 컨트롤로 뷰는 html 파일 그것들을 모델에 담아서 서버 측에 넘겨준다.

 

package test.testproject.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 TestController {
    @GetMapping("test-mvc")
    public String testMvc(@RequestParam(value = "name",required = true) String name,Model model){
        model.addAttribute("name",name);
        return "test";
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text="'hi ' + ${name}">test html</p>
</body>
</html>

 

컨트롤러는 기존 컨트롤러를 사용하였고

test.html을 템플릿 폴더에 만들었다.

 

매핑을 통해 localhost8080/test-mvc로 이동해보자.

다음과 같이 에러가 뜰 것이다.

여기서 봐야할 것은 @RequestParam 어노테이션이다.

 

RequestParam을 잘 이해하기 위해 또 다른 예제를 하나 가져와봤다.

 

만약에

localhost8080/test?id=test1234&name=kim 이라고 클라이언트가 다음과 같이 서버에 요청한다고 하자

 

이 요청을 처리하기 위해선

package test.testproject.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 TestController {
    @GetMapping("test")
    public String getUserInfo(@RequestParam("id") Long id, @RequestParam("name") String name, Model model){
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        return "test";
    }
                   
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text="'hi ' + ${id}"></p>
<p th:text="'hi' + ${name}"></p>
</body>
</html>

거의 같은 코드이긴 하나 복습할 겸 넣어봤다.

위의 경우에선 value=name,required=true이 부분을 뺏는데 

매개변수가 매서드 매개변수와 이름이 갖고 어차피 true가 default 값이니 생략하였다. 그 부분을 인지하도록 하자

 

결론적으로 파라미터를 넘기는 어노테이션이기에 그 부분을 빼먹을 경우 에러가 발생한다

정상적으로 파라미터를 넘길 경우 작동하는 것을 볼 수 있다.

 

 

출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard