스프링 웹 개발의 3가지 종류
화면을 보여주는 3가지 방식
1. 정적 컨텐츠(Static Content) - 파일 그대로 웹 브라우저에 보여주는 것
2. MVC와 템플릿 엔진 - JSP/PHP 서버에서 프로그래밍해서 동적으로 바꿔서 보여주는 것
3. API - JSON 데이터 포맷을 이용하여 클라이언트에 데이터를 전달
1. 정적 컨텐츠
: static html 파일과 같이 정적 페이지 웹 브라우저에 그대로 띄우기
웹브라우저(클라이언트)에서 URL요청이 들어오면 내장 톰캣 서버가 요청을 받고, 스프링 컨테이너에 넘긴다.
스프링컨테이너는 제일먼저 Controller에서 관련 hello-static 이라는 컨트롤러를 찾는데 매핑되는 것이 없으면
스프링부트는 내부에있는 resources 파일에서 파일을 찾는다.
파일이 있으면 반환시킨다.
정적 컨텐츠 html 페이지
<resources/static/hello-static.html>
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
2. MVC와 템플릿 엔진
* View : 화면 ( 프론트 )* Controller : 비즈니스 로직, 서버 뒷단 ( 백엔드 )
* Model : 화면에 필요한 것을 controller로부터 담아 view에게 넘겨줌.
컨트롤러
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name" , name);
return "hello-template";
}
}
template view
<resources/templates/hello-template>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
주소를 localhost:8080/hello-mvc 로 치면 오류페이지가 뜬다.
컨트롤러에서 name 값이 필수(default)이기 때문이다.
# 참고 : [Ctrl] + P를 누르면 파라미터 정보를 참고할 수 있다.
required = false로 해놓으면 값을 넣지 않아도 실행된다.
대신 url을 이용하여 get 방식으로 클라이언트로부터 직접 name 값을 서버에 전달하자.
http://localhost:8080/hello\_mvc?name=hihi
1. 웹 브라우저에서 주소 호출이 되면 내장 톰캣 서버가 'hello-MVC' URL 요청을 스프링에게 전달한다.
2. 스프링은 mapping되어있는 'hello-mvc' 메서드를 호출하고, 모델에 key-value값을 담아 다시 스프링에게 전달한다.
3. 스프링은 viewResolver에게 전달한다. (viewResolver는 뷰를 찾아주고 템플릿을 연결시켜주는 역할을 한다.)
4. viewResolver는 return에 설정된 'hello-template.html'이라는 이름과 같은 파일을 templates폴더에서 찾는다.
5. "templates/hello-template.html"을 찾은 뒤 타임리프 템플릿 엔진에 처리해달라고 넘긴다.
6. 템플릿 엔진이 랜더링 한 HTML을 웹브라우저에 최종적으로 넘긴다.