Database를 제외한 파란색 부분은 모두 Spriong Source가 제공
보라색 부분은 개발자가 구현해야 하고, 녹색 부분인 View는 Spring이 제공하는 부분도 있고, 개발자가 구현해야 하는 부분도 있다.
DispatcherServlet (Front Controller) |
클라이언트의 요청을 받아 컨트롤러에게 전달, 컨트롤러가 리턴한 결과값을 View에게 전달해 알맞은 응답을 생성하도록 한다. |
MVC패턴에서 처음과 끝을 담당하고 있다. | |
Handler Mapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다. |
Handler Adapter | DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달한다. 응답결과를 DispatcherServlet이 요구하는 형식으로 변환한다. |
Controller | 클라이언트의 요청을 처리한 뒤, 결과를 리턴한다. |
ModelAndView | Controller가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다. |
Model | Controller에서 View로 넘겨줄 객체가 저장되는 곳(key- value) |
View Resolver | 컨트롤러의 처리 결과를 보여줄 뷰를 결정한다. (view name을 배탕으로 view 객체 결정) |
1. 클라이언트의 모든 요청을 Dispatcher Servlet이라는 Servlet Class가 받는다.
2. Dispatcher Servlet은 요청 URL을 Handler Mapping에게 전달하고, 현재 요청에 알맞는 Controller와 Method에 대한 정보를 알아낸다.
어떤 요청에 어떤 Controller가 동작할지를 xml파일이나 Java파일의 어노테이션으로 설정한다.
Spring으로 만들어진 Web Application이 실행될 때, Hanlde Mapping 객체들이 생성되면서 이런 정보들을 관리한다.
3. Dispatcher Servlet은 Handler Adapter에게 요청 처리를 위임한다.
4. Handler Adapter는 Controller와 해당 메서드를 실행한다.
Hnadler Mapping은 Dispatcher Servlet으로 부터 전달된 URL을 바탕으로 Handler Adapter 객체를 포함하는 Handler ExecutionChain 객체를 생성하고 후에 Dispatcher Servlet이 HandlerExecutionChain 객체로부터 Handler Adapter 객체를 가져와서 해당 메서드를 실행하게 된다.
5. Controller는 비즈니스 로직을 처리하고, 그 결과를 바탕으로 뷰(ex. jsp)에 전달할 객체를 Model 객체에 저장한다.
Dispatcher Servlet에게 View name을 리턴한다.
Model이나 ModelAndView는 실제 JSP정보를 갖고 있지 않기 떄문에 View Resolver가 실제 JSP이름으로 변환해서 해당 View를 검색하는 것
6. Dispatcher Servlet은 view name을 View Resolver에게 전달해 View 객체를 얻는다.
이때 view name뿐 아니라 accept와 같은 header 정보도 전달된다.
header 정보 내의 Accpet는 HTML, JSON, XML 일 수도 있고, 기본적으로는 HTML이다.
View Resolver는 전달된 정보를 바탕으로 사용자에게 보여줄 View가 무엇인지 결정한다.
JSP인 경우 JstlView 객체가 생성되고, JstlView 객체가 "xxxx.jsp"에 포워딩해 결과를 보여준다.(JSP 객체를 생성하는 것이 아니다.)
7. Dispatcher Servlet은 View 객체에 화면 표시를 의뢰한다.
8. View 객체는 해당하는 뷰(ex JSP, Thymeleaf)를 호출하며, 뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.
Web browser -> Dispatcher Servlet -> Controller -> Model And View -> Controller -> Dispatcher Servlet -> Web brower (화면에 출력하기 위해 View와 View Resolver가 있는 것이다.)
디스패처 서블릿은 기본적으로 WEB-INF폴더 안의 web.xml 파일에서 설정한다.
<!-- dispatcher servlet의 부모(모든 서블릿에 공통적용) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>board</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- .action으로 되있는 컨트롤러로 매핑설정 -->
<servlet-mapping>
<servlet-name>board</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
위의 코드는 게시판을 만들기 위한 서블릿을 만드는 것이라 <servlet-name>을 임의로 board로 설정해 주었고, <url-pattern>에는 .html / .do / .action등으로 다음 board-servlet.xml파일에서 컨트롤러로 핸들러매핑할 url 구성을 적는다.
'멀티캠퍼스 풀스택 과정 > 백엔드' 카테고리의 다른 글
Spring:5 spring(maven project)기본 스타일 지정하기-2 (0) | 2022.03.16 |
---|---|
Spring:4 spring(maven project)를 Mybatis, Mysql과 연결하기(환경설정)-1 (0) | 2022.03.16 |
Spring:2 home.jsp와 연결 (@어노테이션), Model, View, Controller (0) | 2022.03.08 |
Spring:1 [Spring환경설정] STS4 설치후 프로젝트 생성하고 출력 (0) | 2022.03.07 |
백엔드2-2. Servlet-2 ServletConfig, ServletContext(초기화) (0) | 2022.03.05 |