🔅 목차
✅스프링 웹 개발 기초
#1 정적 컨텐츠
✔#2 MVC와 템플릿 엔진
#3 API
🔅 MVC
Model : 어플리케이션의 정보, Data. 화면에 필요한 것을 담아 넘김
View : 사용자들이 볼 수 있는 화면
Controller : 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻함
*** 출처: https://m.blog.naver.com/jhc9639/220967034588
🔅 MVC 실습
📌 HelloController.java
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); // 파라미터로 넘어온 name 추가
return "hello-template";
}
}
📌 HelloController.java 소스 설명
@GetMapping("hello-mvc")
ex) http://localhost:8080/hello-mvc
1개의 HTTP 요청 파라미터를 받기 위해서 사용
형식
@RequestParam("가져올 데이터의 이름") [데이터 타입] [가져온 데이터를 담을 변수]
model.addAttribute("id", id);
https://localhost:8080/hello-mvc?name=sunny
위와 같은 url이 전달될 때 뒤에 붙는 name 파라미터를 가져올 때 사용
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name", name); // 파라미터로 넘어온 name을 모델 객체를 이용해 받음
return "hello-template";
}
Default가 true이기 때문에 반드시 해당 파라미터가 전송되어야 함
해당 파라미터가 전송되지 않으면 400 error 유발
에러를 방지하기 위해서 default 값을 설정해주거나, required 속성을 이용하면 됨
❓required
-타입 : boolean
-설명 : 해당 파라미터가 반드시 필수인지 여부. 기본값은 true
public String testMethod(@RequestParam(required=false) Integer num) {...}
public String testMethod(@RequestParam("num", required=false, defaultValue="1") Integer num) {...}
default 값을 명시해줄때는 required=false 속성을 반드시 사용해야 함
📌 hello-template.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><!--타임리프 엔진을 쓴다-->
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
<!--타임리프 템플릿 엔진의 장점: html을 서버없이 그대로 열어봐도 껍데기를 볼 수 있다-->
<!--엔진으로서 동작하면 p 태그 안의 내용으로 치환이 된다-->
<!--서버없이 볼때는 태그들 사이에 있는 hello! empty가 보인다-->
📌 hello-template.html 소스 설명
🔅 결과
HelloController.java 와 hello-template.html를 작성하고 난 뒤 localhost:8080/hello-mvc를 하면 다음과 같이 에러페이지가 뜸
❓에러가 나는 이유는?
❗해결 방안
🔅 MVC 실습 동작 원리
웹브라우저에서 localhost:8080/hello-mvc 해서 넘긴다.
내장 톰캣 서버를 먼저 지나가는데, hello-mvc라는 것이 왔다고 스프링에게 넘긴다.
helloController의 특정 메서드에 hello-mvc가 매핑이 되어있는 것을 확인하고 호출을 한다.
viewResolver에게 넘긴다. (View를 찾아주고, 템플릿 엔진을 연결시켜주는 역할)
템플릿 엔진이 렌더링을 해서 변환을 한 html을 웹 브라우저에 반환한다.