본문 바로가기

Backend/Spring & SpringBoot

[Spring Framework] 03_01. Spring Framework 설계 모델

728x90

스프링 MVC 프레임워크 기반의 웹 프로그래밍 구조를 살펴보면 다음과 같다.

 

스프링 MVC프레임워크 설계 구조

  1. DispatcherServlet Class가 브라우저의 요청을 받고, 그 요청을 HandlerMapping에게 넘겨준다.

  2. HandlerMapping은 많은 Controller중에 가장 적합한 것(URL, HTTP 메서드 및 정보, 파라미터 참고)을 선택한다.
  3. Controller가 결정되었다면, 실제로 해당되는 컨트롤러의 메소드를 호출해야 되는데 호출방법이 타입에 따라 다르므로 아무리 Controller를 결정했다고 하더라도, DispatcherServlet은 알 길이 없기에 컨트롤 타입을 지원하는 HandlerAdapter라는 인터페이스가 적합한 파라미터를 추출해 해당 Controller의 메소드를 호출한다. 
  4. 다시 DispatcherServlet은 ViewResolver에게 Controller가 리턴한 View 이름을 참고해서 적절하게 View 오브젝트(JSP문서)를 찾아준다.
  5. 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 객체는 개발자가 직접 구성하여야 한다.

 

  1. 스프링 설정파일(servlet-context.xml)에 "<annotation-driven />"태그를 넣어 준다.
  2. 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 값을 찾아서 합쳐준다.

 

728x90