일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스프링
- 플러터 개발환경 설정
- programmers
- php
- C언어
- php 프로그래밍 입문 솔루션
- 페이코 추천인
- 파이썬
- php 프로그래밍 입문
- php 프로그래밍 입문 연습문제
- php 프로그래밍
- 페이코 추천인코드
- JAVA SPRING
- php 프로그래밍 입문 예제
- php 프로그래밍 입문 3판
- Java
- 자바
- 최단 경로
- spring
- php 프로그래밍 입문 문제풀이
- 페이코 초대코드
- 백준
- 한정 분기
- 자바 스프링
- Flutter
- C
- 페이코 친구코드
- 배열
- 플러터
- SWEA
- Today
- Total
ImJay
[Java Spring] 1-6. MVC와 템플릿 엔진 본문
[Java Spring] 1-6. MVC와 템플릿 엔진
1. MVC와 템플릿 엔진 : 서버에서 프로그래밍을 통해 HTML을 동적으로 내려주는 것 (요즘 추세)
2. MVC란? : Model, View, Controller
예전에는 View 에서 모든 작업을 다 했지만, 이제는 View 는 보여주는 것에 집중하고 Model, Controller 가 내부 로직에 비중을 둔다. 당연하겠지만 유지보수 면에서 각자 분리를 하는게 훨씬 효율적이기 때문이다.
3. 기존에 작성했던 HelloController 클래스에 새로운 코드 추가
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
3-1. hello-template 를 반환하기 때문에 helloMvc 함수의 로직 내용의 결과를 hello-template.html 에 View 해준다.
4. 프로젝트 > src > resources > templates > 새로 만들기 > HTML 파일
5. helloMvc 컨트롤러의 View를 위한 hello-template.html 생성
6. 코드 작성
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
- hello! empty 의 의미는? 뒤에서 설명
7. hello-template.html > 경로/참조 복사
8. 절대 경로 선택
9. 복사된 경로를 크롬에 넣고 검색하기
- thymeleaf 템플릿의 장점 : html을 그대로 쓰고 파일을 서버 없이 열어봐도 정적 컨텐츠를 확인할 수 있다.
만약 동적으로 작동하지 않는다면 디폴트 값인 hello! empty 가 출력되게 한다.
즉 서버 없이 마크업 하는 사람들이 작업할 수 있는 환경을 조성한다.
10. 빌드 ( Alt + Shift + F10 ) 후 localhost:8080/hello-mvc 입력 후 결과 확인
10-1. 오류 화면이 나타난다 -> intelliJ 콘솔로 돌아가 오류 내용 확인
Required request parameter 'name' for method parameter type String is not present]
오류 내용 : parameter 에 name 이 넘어오지 않았음!
10-2. 오류 원인 확인
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
(^+P) 단축키를 통해 @RequestParam 의 파라미터 정보를 확인할 수 있다.
@RequestParam(value = "name", required = "true")
value 옵션은 넘겨야 하는 값의 이름이고, required 옵션은 값을 넘길지 말지 결정하는 옵션이다.
required = "false"라면 값을 넘기지 않아도 된다.
그러나 @RequestParam 함수의 required 옵션의 디폴트는 true 이며 따라서 우리는 링크에 value 값을 넘기지 않았기 때문에 페이지에 오류가 발생한 것이다.
11. 오류 해결 : localhost:8080/hello-mvc?name=spring! 입력
- ? 는 http 에서 GET 방식에 해당
12. 과정
12-1. 아래 링크가 입력되면 name 의 값으로 spring! 이 넘어감
12-2. 컨트롤러에서 name 값을 spring! 으로 받아줌
public String helloMvc(@RequestParam("name") String name, Model model)
12-3. 컨트롤러 내 코드에서 모델에 name 값으로 spring! 이 담김
model.addAttribute("name", name);
12-4. View 로 넘어감
return "hello-template";
12-5. Model 로 부터 key 가 name 인 값을 가져와서 치환
<p th:text="'hello ' + ${name}">hello! empty</p>
- ${변수명} 은 Model 로 부터 해당 변수명의 값을 가져온다.
12-6. spring! 이 출력
13. 작동 원리
13-1. 웹브라우저에서 hello-mvc 를 톰캣 서버에 넘김
13-2. 톰캣 서버가 스프링에 hello-mvc 를 넘김
13-3. 스프링이 hello-mvc 이 담긴 컨트롤러를 찾음
13-4. hello-template View 에 반환하고, model 에 name 값이 spring!이 담긴다는 정보를 스프링에 넘김
13-5. 스프링의 viewResolver ( view 를 찾아주고 템플릿 엔진을 연결해주는 역할 ) 가 thymeleaf 템플릿 엔진에게 처리해달라고 넘김
13-6. thymeleaf 템플릿 엔진이 렌더링을 통해 변환 된 HTML을 웹 브라우저에 넘겨줌
'Java Spring > 스프링 입문' 카테고리의 다른 글
[Java Spring] 1-8. 비즈니스 요구사항 정리 (2) | 2023.01.30 |
---|---|
[Java Spring] 1-7. API (2) | 2023.01.30 |
[Java Spring] 1-5. 정적 컨텐츠 (0) | 2023.01.30 |
[Java Spring] 1-4. 빌드하고 실행하기 (2) | 2023.01.30 |
[Java Spring] 1-3. View 환경설정 (2) | 2023.01.30 |