쌓고 쌓다
[Spring] MVC와 템플릿 엔진 with @RequestParam 본문
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! empty" 부분이 hello + ${name}으로 치환이 되는 것이다.
@RequestParam
파라미터 전달 없이 GET 요청을 보내보자.
웹 페이지 에러가 난다. 로그를 보자.
WARN으로 Required request parameter 'name'가 뜬다. name 파라미터를 주지 않아서 그렇다.
"localhost:8080/hello-mvc?name=안녕"으로 요청을 보내보면 "안녕"이 String 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을 웹 브라우저에 던져준다.
'프로그래밍 > spring' 카테고리의 다른 글
회원 도메인과 리포지토리 만들기 (0) | 2023.04.29 |
---|---|
[Spring] API (0) | 2023.03.22 |
[SpringBoot] 정적 컨텐츠(Static Content) (0) | 2023.03.11 |
[SpringBoot] 프로젝트 빌드하고 실행 with 빌드 에러 (0) | 2023.03.11 |
[SpringBoot] 웰컴 페이지 만들기 (0) | 2023.03.04 |