스프링 MVC 프레임워크 기반의 웹 프로그래밍 구조를 살펴보면 다음과 같다.
-
DispatcherServlet Class가 브라우저의 요청을 받고, 그 요청을 HandlerMapping에게 넘겨준다.
- HandlerMapping은 많은 Controller중에 가장 적합한 것(URL, HTTP 메서드 및 정보, 파라미터 참고)을 선택한다.
- Controller가 결정되었다면, 실제로 해당되는 컨트롤러의 메소드를 호출해야 되는데 호출방법이 타입에 따라 다르므로 아무리 Controller를 결정했다고 하더라도, DispatcherServlet은 알 길이 없기에 컨트롤 타입을 지원하는 HandlerAdapter라는 인터페이스가 적합한 파라미터를 추출해 해당 Controller의 메소드를 호출한다.
- 다시 DispatcherServlet은 ViewResolver에게 Controller가 리턴한 View 이름을 참고해서 적절하게 View 오브젝트(JSP문서)를 찾아준다.
- View인 JSP로 브라우저에게 응답을 해준다.
1. DispatcherServlet 설정
DispatcherServlet은 자동으로 설정이 되어있다.
web.xml에 <servlet>태그와 <servlet-mapping> 태그가 이용되어있다.
<servlet>
<servlet-name>서블릿 별칭</servlet-name>
<servlet-class>서블릿명(패키지 이름을 포함한 전체서블릿명)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>서블릿별칭</servlet-name>
<url-pattern>/맵핑명</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2. Controller 객체
Controller 객체는 DispatcherServlet이 클라이언트로부터 요청을 받고 가는 첫 관문이다.
(1) @Controller
Controller 객체는 개발자가 직접 구성하여야 한다.
- 스프링 설정파일(servlet-context.xml)에 "<annotation-driven />"태그를 넣어 준다.
- Controller 객체로 사용할 클래스를 정의해준다.
(2) @RequestMapping
DispatcherServlet가 Controller를 찾았을때 사용자로 부터 들어오는 요청을 매핑시켜줌.
(3) Model 타입의 파라미터
Controller에서 작업이 완료 후 DispatcherServlet에게 다시 올려주는데 이때 사용되는 객체가 Model과 View이다. 그 전에 컨트롤러에서 Model, View를 받을 수 있어야 한다. 이 후 DispatcherServler에 전달된 Model데이터는 View에서 가공되어 클라이언트에게 응답처리
된다
3. View 객체
DispatcherServlet은 클라이언트에게 응답을 하기위해 ViewResolver에게 위임하여, View를 찾는다. Controller객체에 있는 리턴값과 InternalResourceView의 prefix, suffix 값을 찾아서 합쳐준다.
'Backend > Spring & SpringBoot' 카테고리의 다른 글
[Spring Framework] 03_03. 요청 파라미터 처리 방법 (0) | 2020.08.18 |
---|---|
[Spring Framework] 03_02. GET / POST 요청 메서드 매핑 (0) | 2020.08.18 |
[Spring Framework] 03. Spring 개발환경 구축 (0) | 2020.08.13 |
[Spring Framework] 02_02 의존객체 자동 주입 (0) | 2020.08.12 |
[Spring Framework] 02_01. Setter을 이용한 의존성 주입 방법 (0) | 2020.08.12 |