일반 sevlet/jsp를 사용하면 Controller에서 요청을 받고 포워딩을 통해 직접 View 응답을 보낸준다.
하지만 스프링을 쓰면 Controller에게 요청이 직접 가는 것이 아닌 Dispatcher-Servlet을 통해서 받게 한다.
Dispatcher Servlet: 모든 요청을 처리해주는 Front Controller라고 할 수 있다.
즉 우리는 스프링의 도움을 받으므로 스프링이라는 프레임워크가 지정한 방식에 맞추어 만들어 주기만하면 된다.
즉 다음과 같은 과정을 거친다.
위의 번호 순서대로 요청이 처리된다.
1. 사용자가 요청을 하면
2. 3. Dispatcher-Servlet에서 들어온 요청에 대한 url 매핑 정보를 xml에서 찾는다.
4. 찾은 정보로 해당되는 컨트롤러에게 요청을 전달한다.
5. Controller에서 요청에 대한 model과 view를 만져서 Dispatcher-Servlet에 전달한다.
6. Dispatcher-Servlet은 그 내용을 view에서 던져준다.
(POJO는 Plain Old Java Object의 준말로 그냥 자바 오브젝트라고 생각하면 된다.)
아래 web.xml은 스프링의 설정을 담고, 디스패처 서블릿을 설정하는 부분이다.
11라인을 보면 디스패처 서블릿을 만들고, 10라인에서 그 이름을 kingchandispatcher라고 하고 있다. 이렇게 만들어진 디스패터 서블릿을
매핑하기 위해 14라인에서 그 이름을 넣는다.
그리고 그 아래에 <url-pattern>부분은 /(루트)로 들어오는 모든 url을 kingchandispatcher가 처리하겠다는 것이다.
이제 직접 kingchandispatcher-servlet.xml을 만들어서 url매필 정보를 담아보자.
url매핑 정보를 담고 있는 kingchandispatcher-servlet.xml을 보자.
(참고로 url 매핑정보를 담고있는 xml파일의 이름은 *-servlet.xml 형식으로 만들어야 하며, *에는 원하는 이름을 넣어줘도 된다.)
위의 내용을 보면 IndexController라는 controller. 즉 자바클래스를 id="/index"라는 이름으로 Bean객체를 만들어 IOC컨테이너에 넣는다.
id는 url명을 지정하는 것이다.
사용자가 /index라는 url을 요청하면 IndexController라는 컨트롤러에 매핑을 해주는 것이다.
매핑된 컨트롤러를 보자.
맨 위 그림에 컨트롤러가 model과 view를 가지고 있었다. model은 mvc패턴에서 각 계층간에 정보를 전달할 때 사용하는 객체 그릇이다.
14라인에서 modelAndView객체를 만들고 model에 "data"라는 이름으로 "hello spring MVV"라는 문자열 정보를 담았다.
15라인에서는 이 모델을 전송할 뷰의 절대경로를 설정해준다. 디스패처서블릿이 이 정보를 읽고 설정한 view에다가 우리가 심은 model을 뿌려주는 것이다.
이제 우리가 응답을 보낸 index.jsp를 봐보자.
해당 jsp에서 "data"라는 이름으로 보낸 모델을 출력한다.
결과를 보면 다음과 같다.
'java spring > spring mvc' 카테고리의 다른 글
spring mvc 06 - @RestController로 JSON응답하기 (0) | 2021.05.07 |
---|---|
spring mvc 05 - annotation으로 DI하기(@Service, @Controller) (0) | 2021.05.06 |
spring mvc 04 - annotation으로 DI하기(@Autowired) (0) | 2021.05.06 |
spring mvc 03 - static파일 열어주기 (0) | 2021.05.01 |
spring mvc 02 - ViewResolver사용하기 (0) | 2021.05.01 |