# Spring Web MVC framework
- Model-View-Controller (MVC) architecture
- Model : POJO
- View : Rendering HTML(UI), JSON(Data)
- Controller : Handle request and build model and pass to view
- `WebApplicationContext extends ApplicationContext`
## DispatcherServlet
- http request
- handle request
- Controller
- View Resolver
- View
- http response
## `@Controller` vs `@RestController`
- `@Controller`는 주로 Web 페이지의 컨트롤러에서 사용
- Web 페이지용 컨트롤러는 템플릿 엔진 View나 JSP로 전환 응답의 HTML을 생성하기 때문에 기본적으로 메소드의 반환값은 View 전환 대상을 지정하는 데 사용
- `@RestController`는 Json이나 XML 등을 반환 WebAPI 용 컨트롤러로 사용
- View로 전환하지 않기 때문에 메소드의 반환값은 응답(response)의 내용(content) 표시
- https://araikuma.tistory.com/14
## web.xml
```xml
Spring MVC Application
HelloWeb
org.springframework.web.servlet.DispatcherServlet
1
HelloWeb
*.do
contextConfigLocation
/WEB-INF/HelloWeb-servlet.xml
org.springframework.web.context.ContextLoaderListener
```
- HelloWeb-servlet.xml
```xml
```
- HelloController.java
```java
package com.okdevtv.spring;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
```
- hello.jsp
```html
Hello Spring MVC
${message}
```
## related
- [URL Mapping](/mib/spring/mapping)
## ref
- https://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm