본문 바로가기
java spring/spring mvc

spring mvc 01 - dispatcherServlet

by 킹차니 2021. 4. 30.

일반 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매필 정보를 담아보자.

web.xml

 

 

url매핑 정보를 담고 있는 kingchandispatcher-servlet.xml을 보자.

kingchandispatcher-servlet.xml

 

(참고로 url 매핑정보를 담고있는 xml파일의 이름은 *-servlet.xml 형식으로 만들어야 하며,  *에는 원하는 이름을 넣어줘도 된다.)

위의 내용을 보면 IndexController라는 controller. 즉 자바클래스를 id="/index"라는 이름으로 Bean객체를 만들어 IOC컨테이너에 넣는다.

id는 url명을 지정하는 것이다. 

사용자가 /index라는 url을 요청하면 IndexController라는 컨트롤러에 매핑을 해주는 것이다.

 

매핑된 컨트롤러를 보자.

IndexController

맨 위 그림에 컨트롤러가 model과 view를 가지고 있었다. model은 mvc패턴에서 각 계층간에 정보를 전달할 때 사용하는 객체 그릇이다.

14라인에서 modelAndView객체를 만들고 model에 "data"라는 이름으로 "hello spring MVV"라는 문자열 정보를 담았다.

15라인에서는 이 모델을 전송할 뷰의 절대경로를 설정해준다. 디스패처서블릿이 이 정보를 읽고 설정한 view에다가 우리가 심은 model을 뿌려주는 것이다.

 

이제 우리가 응답을 보낸 index.jsp를 봐보자.

index.jsp

해당 jsp에서 "data"라는 이름으로 보낸 모델을 출력한다.

결과를 보면 다음과 같다.

요청한 주소
실행된 결과