반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
11-07 11:40
관리 메뉴

ImJay

[Java Spring] 1-6. MVC와 템플릿 엔진 본문

Java Spring/스프링 입문

[Java Spring] 1-6. MVC와 템플릿 엔진

ImJay 2023. 1. 30. 13:04
반응형

[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을 웹 브라우저에 넘겨줌

반응형
Comments