쌓고 쌓다

[Spring] MVC와 템플릿 엔진 with @RequestParam 본문

프로그래밍/spring

[Spring] MVC와 템플릿 엔진 with @RequestParam

승민아 2023. 3. 18. 00:00

MVC (Model View Controller)

View는 화면을 그리는데 집중하고 Controller, Model은 비즈니스 로직이나 내부 처리에 집중하자.

 

Controller

@Controller
public class HelloController {

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

웹에서 파라미터를 받을때 @RequestParam 어노테이션을 사용한다.

model에 담으면 View에서 렌더링 할 때 사용한다.

model에 키:"name"과 파라미터로 넘어온 name을 담았다.

 

@Request("namename") String name이라면 GET 요청을 "?namename=이름"으로 보내고

 

View

resources/templates/hello-template.html

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

hello! empty는 hello-template.html 파일을 서버 없이 열때 껍데기처럼 출력되는 부분이다.

서버 실행 없이 hello-template.html 실행

타임리프와 같은 템플릿 엔진으로 서버와 함께 동작을하면

"hello! empty" 부분이 hello + ${name}으로 치환이 되는 것이다.

 

 

@RequestParam

파라미터 전달 없이 GET 요청을 보내보자.

파라미터 없이 GET 요청

웹 페이지 에러가 난다. 로그를 보자.

에러 발생

WARN으로 Required request parameter 'name'가 뜬다. name 파라미터를 주지 않아서 그렇다.

 

"localhost:8080/hello-mvc?name=안녕"으로 요청을 보내보면 "안녕"이 String name = "안녕"으로 들어간다.

?name=안녕

 

옵션

옵션

@RequestParam의 옵션에 기본값을 지정할 수 있고, required를 통해 필수로 입력을 하지 않음을 설정할 수 있다.

 

필수 해제 및 기본값 설정

@Controller
public class HelloController {

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(value = "name", required = false, defaultValue = "기본") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }

}

기본값 출력

 

 

+ 아래와 같이 어노테이션을 사용하지 않아도 파라미터를 전달받을 수 있다.

@Controller
public class HelloController {

    @GetMapping("hello-mvc2")
    public String helloMvc2(String name, int age, Model model) {
        model.addAttribute("name", name);
        model.addAttribute("age", age);
        return "hello-template";
    }
    
}
요청 : http://localhost:8080/hello-mvc2?name=LSM&age=777

 

 

MVC, 템플릿 엔진 처리 방식

출처: 인프런 - 김영한

웹 브라우저에서 hello-mvc를 요청하면

스프링 부트가 띄울 때 포함되는 내장 톰캣 서버를 거친다.

톰캣이 hello-mvc가 왔음을 스프링에 던진다.

helloController에 매핑이 되어 있기에 그 메소드를 호출을 한다.

그 메소드는 model에 키:name과 값:spring을 넣고, hello-template을 리턴한다.

그럼 viewResolver(뷰를 찾아주고 템플릿 엔진을 연결시켜줌)가 똑같은 hello-template.html을 찾아서

템플릿 엔진에 처리 요청을 하고 템플릿 엔진이 변환한 html을 웹 브라우저에 던져준다.

Comments