프로그래밍을 Model, View, Controller 로 역할을 나눠 개발하는 방식이다.
비지니스 로직의 핵심적 기능을 구현한다. 예를 들어 상품 검색, 장바구니 담기, 상품검색, 결제 드으이 기능이다.
사용자의 입력, 결과 출력 등 무언가를 표시하는 부분이며 화면을 담당한다.
비지니스 로직과 뷰를 제어하는 역할을 한다.
사용자가 뷰에게 명령을 내리면, 이를 뷰가 컨트롤러에게 전달하고, 모델과 뷰에게 지시한다.
Spring MVC는 프론트 컨트롤러 라는 디자인 패턴을 채택하였다.
모든 클라이언트의 요청을 하나의 컨트롤러가 먼저 수신한 뒤, 다른 컨트롤러에게 요청을 분배한다. 이런 가장 먼저 받는 컨트롤러를 Dispatcher Servlet이라고 부른다.
의존성 추가
1. Spring Boot DevTools
2. Thymeleaf(탬플릿 엔진)
HTML, XML등 다양한 View파일에 동적으로 값을 넣어주는 역할을 한다.
탬플릿 엔진은 데이터와 템플릿 파일을 합쳐서 최종적인 뷰를 생성해낸다.
빌드 세팅
1. 설정-빌드도구-gradle-gradle jvm에서 java버전 변경하기.
2. 프로젝트 구조- 프로젝트설정-프로젝트SDK에서 java버전 변경하기.
@Controller
@RequestMapping("hello")
public class HelloViewController {
@GetMapping("view")
public String helloView(){
return "hello";
}
}
#### 해석
1. @Controller : 이 클래스를 컨트롤러로 선언한다. HTTP요청을 받아 로직을
호출하고 응답을 반환하는 역할을 한다.
2. @RequestMapping("hello") : 컨트롤러와 URL을 매핑하기 위한 역할.
안의 인자는 매핑할 URL의 경로이다.
3. @GetMapping("view") : /hello/view URL로 들어오는 요청을 이 메소드가 처리한다고 선언한다.
1. @RequestMapping("hello") // [value = 생략가능]
이 클래스 안의 모든 메소드는 hello로 시작하는 URL과 매핑된다.
2. @RequestMapping(value = {"hello", "hellospring"})
이 클래스 안의 모든 메소드는 hello,hellospring 로 시작하는 URL과 매핑된다.
3. @RequestMapping(value = "hello", method = RequestMethod.GET)
4. @RequestMapping(value = "hello", method = {RequestMethod.GET,RequestMethod.POST})
@RequestMapping(value = "hello", method = RequestMethod.GET)
@GetMapping(value = "hello")
단, 예제의 경우, @RequestMapping("hello")를 클래스 외부에 적용해 주었음으로,
URL맨 앞에 hello를 기본적 설정 후, view를 Get방식으로 받아옴을 나타낸다.
즉, 클라이언트에서 GET메소드로 http://localhost8080/hello/view URL을 보내면, HelloViewController의 helloView 메소드가 호출된다.
일반적인 HTTP구조
http://[서버명]:[포트번호]/[애플리케이션명]/[기능 명]
localhost= 내컴퓨터
포트번호 = 어떤 프로그램에 데이터를 보낼지 구분하는 구분자
@RequestMapping(value = "hello", method = RequestMethod.GET)
@PostMapping(value = "hello")
뷰(html)는 resources.template 패키지 안에서 구현한다. 만약, 보여줘야할 화면이 많을 때는 기능별로 하위 폴더를 만들고, 그 안에 각 뷰를 배치한다. 또한, CSS나 자바스크립트를 작성해야한다면, resources.static 패키지 안에서 구현하면 된다.
resources.template 패키지에 HTML 삽입하기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>샘플 뷰</title>
</head>
<body>
<h1>Hello View!!!</h1>
</body>
</html>
컨트롤러가 뷰를 가져와 사용자에게 보여준다.