View 환경설정
인프런 김영한님의 < 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 > 강의
wellcom page를 만들어보자.
resources > static : 변하지 않는 정적 파일
에다가 index.html을 추가하자.
1
2
3
4
5
6
7
8
9
10
11
|
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charser=UTF-8"/>
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
|
cs |
그리고 서버를 다시 키면,
이런 페이지가 뜬다.
spring boot는 spring생태계를 감싸서 편리하게 사용할 수 있도록 도와주는데, 어마어마하게 커서 필요한 걸 찾는 능력이 중요함.
spring.io에 들어가서 Projects>Spring Boot>LEARN가면 버전에 따라 선택한 뒤 Reference Doc.를 뒤져보자
spring은 먼저 static>index.html을 찾는데, 만약 못찾으면 index템플릿을 찾고 뭐 이런식으로 동작한다고 한다.
이런식으로 메뉴얼에서 검색할 수 있어야 한다,,
Tymeleaf 템플릿을 이용해보자.
spring boot auto-configuration은 FreeMaker등 4가지 템플릿을 제공함
실제로 동작하는 화면을 만들어보자.
제일 먼저 웹 애플리케이션에서 첫번째 진입점인 controller를 생성한다.
패키지로 이렇게!
그 안에 HelloController class를 만들고,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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";
}
}
|
cs |
이렇게 적어준다.
Controller는 꼭 어노테이션을 적어줘야함.
그리고 html파일 만들기
1
2
3
4
5
6
7
8
9
10
11
|
<!DOCTYPE HTML>
<html xmlns:th="http://www.tymeleaf.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 |
동작은 아래 주석에
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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 {
//Get은 Get,Post할때 그 Get.
@GetMapping("hello") //웹 어플리케이션에서 /hello라고 들어오면, 이 메소드를 호출해줌
public String hello(Model model){ //Spring이 model이라는 걸 만들어서 넣어줌
//key:data, value:hello value에서 hello가 치환됨.
model.addAttribute("data", "hello!!");
return "hello"; //resources에 있는 hello를 찾아서 렌더링하라는 거. 이 화면을 실행시켜라!(hello.html)
//spring은 보통 resources > templates 아래 있는 hello를 찾음.
}
}
|
cs |
컨트롤러에서 return값으로 문자를 반환하면, viewResolver가 화면을 찾아서 처리함.
이 viewResolver는 어떻게 동작하냐면
spring boot 템플릿 엔진은 기본적으로 viewName 매핑되는데
resources:tamplates/ + {ViewName} + .html
이렇게 바뀐다. 그래서 tamplates 밑에 있는 hello.html이 열리는 것!
따라서 hello.html 안에
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
${data}는 model에서의 key값인 것. 그래서
<p th:text="'안녕하세요. ' + hello!! " >안녕하세요. 손님</p>
이렇게 hello!!로 바뀜.
!Tip
spring-boot-devtools 라이브러리를 추가시 html 파일을 컴파일만 해주면 서버 재시작 없이 View파일 변경이 가능해진다!
빌드해서 실행해보자.
cmd창에서 hello-spring 폴더로 경로를 이동하고 파일 목록을 확인하는 dir명령어 입력해보면,
이런게 나온다. 그리고
//gradlew는 MAC, gradlew.bat은 WINDOW.
gradlew build
하면 빌드됨.
그러면 필요한 라이브러리 다운받기도하고, 빌드 폴더가 생기는데
cd build\libs해보면
.jar파일이 생성되어있는 것을 볼 수 있다.
java -jar로 java를 실행시키면
java -jar hello-spring-0.0.1-SNAPSHOT.jar
spring이 뜬다.
다시 localhost/8080에 접속하면 되는걸 알 수 있다.
종료는 Ctrl+C
8080 port는 동시에 못띄우니까 인텔리제이에서 꼭 끄고 실행하자!
서버 배포할때는 jar파일만 복사해서 서버에 넣어주고, java -jar 로 실행해주면 서버에서도 동작하게 됨.
과거엔 톰캣을 설치하고 특정 폴더에 다 집어넣어야했지만 지금은 jar파일 하나만 집어넣고 실행시키면 끝남,, 편리하다
실행이 잘 안된다면 아래 참고
//hello-spring폴더로 이동 후
gradlew clean //build폴더 없어짐
gradlew clean build //완전히 지우고 다시 build함! 잘 안된다면 이렇게 해보자
여기까지 start.spring.io로 프로젝트 생성했고, 라이브러리, 뷰환경, 템플릿 엔진 돌려봤고, build하고 실행하는 것 까지 끝