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
관리 메뉴

프로그래밍 끄적끄적

[SpringBoot] 스프링 입문 - View 환경설정 본문

백엔드/스프링

[SpringBoot] 스프링 입문 - View 환경설정

soeunkk 2021. 7. 23. 13:24

* Welcome page (정적 페이지)

src/main/resources/static/index.html

 

스프링 부트는 시작 페이지를 보여주기 위해 먼저  static에서 index.html 파일을 찾는다. 발견되지 않으면 templates에서 index.html 파일을 찾는다. 

 

* Thymeleaf 템플릿 엔진

1
2
3
4
5
6
7
8
9
@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data""hello!!");
        return "hello";
    }
}
 
cs

Line 1) @Controller

템플릿을 보여주기 위해선 이를 위한 Controller를 만들어야 한다.

컨트롤러를 작성할 때에는 클래스 선언 윗 부분에 @Controller라고 표기해야 한다.

 

Line 3) @GetMapping("[상대경로]") 

@GetMapping은 HTTP GET 요청을 특정 핸들러 메소드에 매핑하기 위한 annotaion이다.

예를 들어 @GetMapping("hello")는 localhost:8080/hello 라는 url로  요청이 들어왔을 때 해당 메소드를 수행하라는 의미이다.

Django의 urls.py와 같은 역할이라고 할 수 있다.

 

Line 4) public String 메소드(Model model)

컨트롤러에 해당하는 핸들러 메소드는 매개변수로 Model 객체을 갖는다.

Controller는 이러한 Model을 이용해 데이터를 가져오고 View에게 데이터를 넘겨 적절한 View를 생성한다.

 

- View에 값 전달하기

Line 5) model.addAttribute([속성명],[속성값])

(key, value) 쌍으로 View에게 데이터를 전달할 수 있다.

Django의 render(request, [template_name], [context])에서 context와 같은 역할이라고 할 수 있다.

 

- View 보여주기

return [파일명]

templates 안에 있는 View를 클라이언트에게 보여준다.

 

 

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
cs

resources/templates 안에 웹에 보여줄 html 파일을 작성한다.

Line 2) html 태그에 xmlns:th="http://www.thymeleaf.org" 라는 속성을 추가하여 Thymeleaf 엔진을 사용한다.

Line 8) 서버에서 전달받은 값은 ${[속성명]}을 통해 사용할 수 있다.

 

* Thymeleaf 템플릿엔진 동작 과정

동작 과정은 위의 그림과 같다. 

localhost:8080/hello 라는 url이 서버로 오면, 내장된 톰켓 서버는 컨트롤러 중에 매핑할 수 있는 코드가 있는지 찾는다.

매핑할 수 있는 코드가 발견되면 해당 컨트롤러 메소드를 실행한다. 

컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 해당 화면을 찾아서 처리한다.

Comments