본문 바로가기
Develop/Spring

[Spirng] Spring MVC 프로젝트 폴더 구조와 실행 순서 and DispatcherServlet 소스 분석

by dev_m.w 2024. 2. 20.

Spring MVC란? 

 Model, View, Controller구조인 소프트웨어 디자인 패턴이다. 사용자 인터페이스와 비지니스 로직을 분리하여 각자 개발에 집중 할수 있게 되었다 

 

Model : 데이터를 처리를 담당 하는 영역 (Service와 DAO,DTO)역역으로 나눔.  

 -> Model 에서는  view와 Controller 어떠한 정보도 가지고 있어서는 안 된다.

 

View: 사용자 인터페이스를 담당하며 사용자에게 보여지는 부분이다.

-> Model이 가지고 있는 정보를 저장해서는 안되고, Model,Controller 구성 요소를 알아서 안 된다.

 

Controller: 사용자의 요청을 처리하고 Model과 View를 중개하는 역활을 한다.

 

 

Spring MVC는 서블릿 기반으로 동작하고

서블릿 이란 웹페이지를 동적으로 생성하는 서버측 프로그램을 말한다.

더 구체적으로 말하자면 서블릿은 웹서버의 성능향상을 위해 사용되는 자바 클래스의 일종이다.

서블릿은 JSP와 유사하지만, 서블릿은 자바코드 안에 HTML을 포함한다,

반면에 JSP는 HTML안에 자바 코드를 한다.

 

 

Spring MVC 프로젝트의 기본 구조

Spring MVC 프로젝트 기본 구조

 

 

Spring MVC 프로젝트의  실행 순서

 

 

 

 DispatcherServlet  란?

디스패처서블릿은 HTTP 요청들을 매핑된 컨트롤러로 배차해주는 역할을 수행하는 중앙 서블릿이다.

 

Dispacher.Servlet의 소스분석

 DispatcherServlet.class 는 spring-webmvc-스프링버전RELEASE.jar에 포함

소스 파일 위치 - org/springframework/web/servlet DispacherServlet.java

기본 전력 -    org/springframework/web/servlet/DispatcherServlet.properities .

 

 

Dispacher.Servlet.java 주요 메서드

 

void initStrategies(Application Context context) - 기본 전략을 초기화

                                                               🔻

void doService(HttpServletRequest request, HttpServletResponse response) - doDispatch()호출

                                                               🔻

void doDispatch(HttpServletRequest request, HttpServletResponse response) - 실제 요청을 처리

                                                               🔻

void processDispatchResult( HttpServletRequest request, HttpServletResponse response, HadlerExecutionChain)-

예외가 발생했는지 확인하고 , 발생하지 않았으면 reder() 호출

                                                               🔻

void render(ModelAndView mv,  HttpServletRequest request, HttpServletResponse response) -응답 결과를 생성해서 전송.

 

 

DispatcherServlet properities 기본전략  

스프링이 기본적으로 사용할 클래스들이 종류별 저장되어있는게 properities파일.

사용자의 요청을 처리하는 과정에서 다음과 같은 특수 Bean들을 사용함.

DispatcherServlet.properities

 

 

Bean Type 역할
HandlerMapping 요청들과 핸들러들을 HandlerMapping 구현체의 기준에 따라 매핑해줍니다.
HandlerAdapter 매핑된 핸들러를 호출합니다. 어댑터 패턴을 적용했기 때문에 디스패처서블릿이 핸들러의 어노테이션이나 파라미터에 대해 몰라도 됩니다.
HandlerExceptionResolver 예외들을 뷰에게 매핑해주고 다양한 예외처리 코드를 가능하게 해줍니다.
ViewResolver 문자열 기반의 논리적 뷰이름을 실제 뷰로 변환해줍니다.
LocaleResolver 사용자의 로케일을 기반으로 국제화된 뷰를 제공해줍니다.
ThemeResolver 웹 애플리케이션이 사용가능한 theme을 리졸브 해줍니다.
MultiPartResolver multi-part 요청들을 파싱하여 파일업로드와 같은 기능들을 지원합니다.
FlashMapResolver 입출력데이터를 FlashMap에 저장 및 반환하여 속성들을 한 요청끼리 전달할 수 있게 해줍니다. 주로 리다이렉트 시 사용됩니다.

 

 

 

 

 

 

 

 

 

 

 

출처

https://ala-nueva.tistory.com/195

https://yeo-computerclass.tistory.com/401

 https://kchs94.tistory.com/201

 https://dev-coco.tistory.com/163 

https://yejun-the-developer.tistory.com/4

https://hpark3.tistory.com/28

스프링의 정석 남궁성