프로그래밍/JAVA Spring

Servlet과 DispatcherServlet

hectick 2023. 9. 25. 22:14
정적말고 동적으로 정보를 처리해보자!

 

 

Servlet

 

서블릿 컨테이너에는 여러 서블릿이 모여있다. 

웹서버는 클라이언트로부터 요청을 받으면 서블릿 컨테이너 속의 적절한 서블릿에게 요청을 처리"해줘"를 시전 한다.

서블릿은 그걸 처리해주는 역할이다.

 

 

ServletContainer

 

서블릿을 지원하는 WAS를 서블릿 컨테이너라고 하는데,

대표적으로는 톰캣이 있다.

 

서블릿 컨테이너는 서블릿과 웹 서버가 요청과 응답을 주고받을 수 있도록 해준다.

 

서블릿 컨테이너는 서블릿을 관리한다.

서블릿이 필요할 때, 메모리에 해당 서블릿이 없다면 인스턴스화해서 메모리에 올린다.

그리고 나중에 종료도 시켜준다.

 

 

DispatcherServlet

 

그렇다면 웹서버가 보내준 요청을 처리할 적절한 서블릿을 어떻게 찾느냐?

Spring MVC에서는 DispatcherServlet이란 서블릿이 존재한다.

서블릿 컨테이너로 들어오는 모든 요청을 DispatcherServlet이 받아버리는 것이다.

DispatcherServlet은 맨 앞에서 요청을 다 받아버리니 Front Controller라고도 한다.

 

DispatcherServlet은 @Controller가 달려있는 컨트롤러를 찾아내서 요청 정보에 따라 어떤 Controller(좀 더 구체적으로는 Controller의 어떤 메소드)를 호출해야 하는지를 미리 가지고 있는데,

이를 토대로 요청에 대해 처리할 수 있는 Controller를 찾아내고, 실행하는 것이다.

Controller가 실행된 결과로 Model과 View가 반환이 되는데, Model에 들어있는 요청 처리 결과를 토대로 View를 렌더링해서 응답을 반환한다.

 

그렇다면 서블릿 컨테이너에 존재하는 서블릿으로 DispatcherServlet 딱 하나만 존재하면 잘 돌아가는 것인가? 그건 아직 모르겠다