1. MVC
- Model, View, Controller
- 과거에는 Controller, View가 분리되어 있지 않았음
View에서 모든 것을 처리 (ex. jsp) -> Model1 방식 - View : 화면에 관련된 일만 / Controller : 비즈니스 로직, 뒷 단에 관련된 일
2. 템플릿 엔진
- 템플릿 엔진 : html을 서버에서의 처리를 통해 동적으로 바꿔서 전달 ex) jsp, php
- thymeleaf 템플릿 엔진
장점 : 서버없이 열어봐도 구조를 볼 수 있음
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
{name} : Mode에 key가 name인 것의 값을 가져와서 치환해줌
① 서버없이 절대경로로 접근 시
: hello! empty 확인 가능 (서버없이 구조 확인 가능)
② Controller에 "hello-mvc" 매핑 추가 후 http://localhost:8080/hello-mvc 로 접근 시
: "Whitelabel Error Page" 확인
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
(Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present])
required 옵션의 default가 true이기 때문에 무조건 값을 넘겨줘야 함
(참고 : intelliJ 파라미터 정보 보기 단축키 : command + p)
③ http://localhost:8080/hello-mvc?name=spring 로 접근 시
: "hello spring" 확인 가능 (파라미터로 넘겨준 name이 템플릿 엔진에 의해 변환됨)
① 웹 브라우저에서 localhost:8080/hello-mvc 요청
② 내장 톰캣 서버가 요청을 받아서 Spring에 넘김
③ Spring은 먼저 컨트롤러 쪽에서 hello-mvc가 있는지 찾음
④ Controller에 매핑된 메소드호출 및 hello-template 리턴, model에는 key:name / value:spring 저장
⑤ Spring의 viewResolver가 hello-template이라는 이름의 view를 찾아서 thymeleaf 템플릿 엔진에 처리 요청
(viewResolver : view를 찾아서 템플릿 엔진을 연결시켜줌)
⑥ 템플릿 엔진이 렌더링을 해서 변환을 한 html을 웹 브라우저에 넘김
(정적인 경우는 변환하지 않고 그대로 넘김)
참고 - 인프런 무료 강의 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 [김영한님]
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
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'Java > Spring' 카테고리의 다른 글
[Spring] API (0) | 2022.07.19 |
---|---|
[Spring] 정적 컨텐츠 (0) | 2022.06.28 |
[Spring] 빌드하고 실행하기(Git Bash, CMD) (0) | 2021.10.20 |
[Spring] View 환경설정 (0) | 2021.10.19 |
[Spring] Spring 라이브러리(dependencies) (0) | 2021.10.19 |