Welcome page(정적 페이지 동작)
src>main>resources>static(정적페이지) 아래에
index.html 을 제작해주면 localhost:8080으로 접속했을 때 뜨는 에러페이지를
일반적인 페이지로 재단할 수 있다.
index.html
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
다음과 같은 페이지가 만들어 진다.
동적 페이지 동작
본격적으로 간단한 스프링 코드를 통해 동작모습을 알아보도록 한다.
구조는 다음과 같다.
hellospring아래 controller 패키지를 만들어 주고, 그 안에 HelloController라는 클래스를 만들어준다.
resources의 templates 아래에는 HelloController에서 동작하는 모습을 실제로 사용자에게 보여줄 hello.html을 만든다.
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 {
//GET, POST등의 method할 때 Get임
@GetMapping("hello") // "/hello"를 입력하면 method가 호출됨
public String hello(Model model) {
model.addAttribute("data","hello!!");
return "hello";
}
}
hello.html
<!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>
localhost:8080/hello로 접속할 경우 다음과 같이 뜨는 것을 알 수 있다.
hello.html 내에서
안녕하세요. + ${data} 부분에서 data가
HelloController의 model.addAttribute("data","hello!!") 부분에서 data(변수이름)를 hello!!(변수값)로 치환해서 보여준 것이다.
model.addAttribute(attributeName, attributeValue)
변수 값 부분에 hello!! 대신 DB에서 끌어온 값을 넣는 등 유용하게 사용할 수 있다.
동작원리는 다음과 같다
동작 환경 그림
웹 브라우저에서 localhost:8080/hello(url이 넘어오는 GET방식) 를 입력받으면,
Tomcat이라는 내장서버에서 받아 spring에게 던져 매칭되는 url이 있는지 알아본다.
spring에는 @GetMapping("hello")로 매칭이 되므로, 이와 매칭되어 작성된 hello method가 실행된다. hello method는 매개변수로 model을 넘겨받는다. (model은 스프링이 만들어 넣어준다.)
model에 data:hello라는 정보(addAttribute)를 담은 후, "hello"를 return한다.
이는 hello.html로 return한다는 의미와 같다. (= 즉, hello.html이라는 곳을 찾아가서 랜더링해라, hello.html을 화면에 띄워라)
스프링은 보통 resources/templates 내에서 return된 것을 검색한다( hello.html을 찾아보는 장소가 거기라는 의미)
그 후 그 페이지를 랜더링한다.
다시말하면, 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리한다.
→ 기본적으로 veiwName mapping은
resources::templates + (ViewName) + .hmtl 로 이루어진다
참고자료
김영한 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술
- View 환경설정
'Backend > Spring' 카테고리의 다른 글
[Spring] 회원관리 예제-1) 도메인과 레포지토리 (0) | 2021.09.07 |
---|---|
[Spring] 웹개발 기초(정적,MVC,API) (0) | 2021.09.01 |
[Spring] 스프링부트 활용하기 (0) | 2021.08.31 |
[Spring] 프로젝트 환경설정 & 빌드 (0) | 2021.08.29 |
[Mac] M1 Java11설치 (0) | 2021.08.29 |