본문 바로가기

Spring

[Spring] 정적 페이지, 템플릿 엔진 동작

[HelloController]

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!");
        return "hello";
    }

}
  • @getMapping("hello") 는 웹 어플리케이션에서 http://localhost:8080/hello 로 들어오게 되면 hello 메서드를 호출해준다.
  • http url을 임의로 치고 엔터를 치는 것을 Get 방식이라고 한다.
  • http://localhost:8080/hello 의 /hello가 url에 매칭이 되면 해당 메서드가 실행이 된다.
  • return "hello" 라고 하면 기본적으로 스프링은 resources/templates/hello.html 을 찾아서 렌더링 한다.

 

[template.hello.html]

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"> // tymeleaf 템플릿 엔진 선언
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
  • th 는tymeleaf 의 th 이다.
  • tymeleaf 템플릿 엔진을 선언하면 쓸 수 있다.
  • ${data} 는 model에 attribute에 add해서 key로 넣었던 data, value는 hello! 이다.
  • ${data} 부분이 hello! 로 치환된다.
  • 스프링 부트는 처음으로 static 디렉토리에 위치에 있는 index.html을 찾고 없다면 templates 디렉토리에 있는 index.html을 찾는다.

  • Controller에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다.
  • 스프링 부트 템플릿 엔진 기본 viewName 매핑
  • resources:templates/ + {ViewName} + .html

 

빌드

 

이제 빌드를 해서 실제로 실행할 수 있는 파일을 만들어보겠습니다.

./gradlew.bat build // 윈도우
./gradlew build // Mac

 

빌드가 성공하셨다면 해당 디렉토리로 이동해주세요.

cd build/libs

 

이동이 완료하셨다면 실행시켜봅시다.

java -jar hello-spring-0.0.1-SNAPSHOT.jar

 

스프링이 뜨고 실행이 완료되었다면 http://localhost:8080/ 로 이동해줍시다.

 

 

서버에 배포할 때는 이 파일만 복사해서 서버에 넣어주시고 이런식으로 실행을 하면 서버에서도 스프링이 동작됩니다.

jar 파일로 실행을 완료했다면 IDE에서 8080 포트로 두개를 동시에 못 띄우니 꼭 꺼주세요!

 

 

참고

./gradlew.bat clean // build 파일 없애기 (Window)
./gradlew clean // build 파일 없애기 (Mac)

 

'Spring' 카테고리의 다른 글

[Spring] 객체 지향 설계 SOLID 원칙  (0) 2024.06.10
[Spring] AOP  (0) 2024.06.10
[Spring] 스프링 DB 접근 기술  (0) 2024.06.10
[Spring] spring-boot-devtools  (0) 2024.06.09
[Spring] 웹 개발 방식  (0) 2024.03.28