프로그래밍 끄적끄적
[SpringBoot] 스프링 입문 - View 환경설정 본문
* 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가 해당 화면을 찾아서 처리한다.
'백엔드 > 스프링' 카테고리의 다른 글
[SpringBoot] 스프링 입문 - 회원 관리 예제(테스트 케이스 작성-리포지토리 테스트) (0) | 2021.07.28 |
---|---|
[SpringBoot] 스프링 입문 - 회원 관리 예제(비즈니스 요구사항 정리, 도메인, 리포지토리) (0) | 2021.07.28 |
[SpringBoot] 스프링 입문 - 스프링 웹 개발 기초(정적 컨텐츠, MVC, 템플릿 엔진, API) (0) | 2021.07.25 |
Port 8080 was already in use 에러 (0) | 2021.07.21 |
invalid source release 에러 (0) | 2021.07.21 |