728x90
반응형
🧑🏻💻 Spring MVC 정의
- Spring에서 제공하는 웹 모듈로서, Model ,View, Controller 로 구성된다.
- 사용자의 다양한 HTTP Request를 처리하고, 단순 텍스트의 응답에서부터 REST 형식의 응답은 물론 VIEW를 표시하는 HTML file을 반환하는 응답까지 다양한 응답을 제공한다.
🔨 Spring MVC 특징
- Spring MVC는 기본요소인 Model, View, Controller 외에도, 아래와 같은 특성을 가지고 있다.
- DispatcherServlet, HandlerMapping, Controller, Interceptor, ViewResolver, View등 각 컴포넌트들의 역할이 명확하게 분리되어 있다.
- HandlerMapping, Controller, View등 컴포넌트들에 다양한 인터페이스 및 구현 클래스를 제공함으로써 경우에 따라 선택하여 사용할 수 있다.
- Controller(@MVC)나 폼 클래스(커맨드 클래스) 작성시에 특정 클래스를 상속받거나 참조할 필요 없이 POJO 나 POJO-style의 클래스를 작성함으로써 비지니스 로직에 집중한 코드를 작성할 수 있다.
- 웹요청 파라미터와 커맨드 클래스간에 데이터 매핑 기능을 제공한다.
- 데이터 검증을 할 수 있는, Validator와 Error 처리 기능을 제공한다.
- JSP Form을 쉽게 구성하도록 Tag를 제공한다.
💡 Spring MVC 핵심 Component
- DistpathcerServlet
- Spring MVC Framework의 Front Controller, 웹 요청과 응답의 Life Cycle을 주관한다.
- HandlerMapping
- 웹요청시 해당 URL을 어떤 Controller가 처리할지 결정한다.
- Controller
- 비지니스 로직을 수행하고 결과 데이터를 ModelAndView에 반영한다.
- ModelAndView
- Controller가 수행 결과를 반영하는 Model 데이터 객체와 이동할 페이지 정보(또는 View객체)로 이뤄져 있다.
- ViewResolver
- 어떤 Viw를 선택할지 결정한다.
- View
- 결과 데이터인 Model 객체를 display 한다.
🔧 동작원리
- Client의 요청이 들어오면 DispathcerServlet이 가장 먼저 요청을 받는다.
- HandlerMapping이 요청에 해당하는 Controller를 return 한다.
- Controller는 비즈니스 로직을 수행(호출)하고, 결과 데이터를 ModelAndView에 반영하여 return한다.
- ViewResolver는 view name을 받아 해당하는 View 객체를 return 한다.
- View는 Model 객체를 받아 rendering 한다.
🧑🏻💻 Source Code
ex1) localhost:8080/hello 사이트에 접속하면 hello.html을 반환하기
- HelloController
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "spring!!");
return "hello";
}
}
- @GetMapping(”hello”)
- GET방식
- return 의 “hello”는 resource/templates/hello.html 을 반환한다.
- hello.html
- template 엔진은 타임리프를 사용
<!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>
- 위 컨트롤러의 Model 의 addAttribute 메소드를 통해 data 라는 키값으로 spring 이라는 값을 페이지에 출력하게 된다. ${data}에 대입.
ex2) localhost:8080/hello-mvc?name=spring
- querystring으로 값을 전달하여 요청받기.
- @RequestParm 어노테이션으로 name 값으로 요청한 데이터를 불러온다.
@Controller
public class HelloController {
@GetMapping("hello-mvc")
//viewResolver가 전달한다.
public String helloMvc(@RequestParam(value = "name", required = true) String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
}
- 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="'안녕하세요. ' + ${name}" ></p>
</body>
</html>
- ${name}에 대입하여 준다.
김영한 님의 스프링 입문 복습용도 및 추가 학습 용도로 작성되었습니다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] 스프링 컨테이너 생성 (0) | 2023.02.08 |
---|---|
[Spring] Spring의 핵심 및 목적 (0) | 2023.02.07 |
[Spring] 객체지향 프로그래밍과 5원칙 (0) | 2023.02.07 |
[Spring] DI (의존성 주입) - 회원등록 및 수정 예제 (0) | 2022.12.21 |
Maven - pom.xml란 ? (0) | 2022.12.20 |