모든 클래스 매핑을 적용하기에는 코드가 너무 복잡하므로 FrontController 패턴을 이용합니다.
Mime Type 매핑
Mime Type을 식별 한 후 데이터가 필요한 곳으로 매핑하는 것입니다.
HTTP get방식은 데이터를 가지고 오지 않습니다.
데이터를 가지고 가기 위해 요청되었기 때문입니다.
MimeType 이란?
서버에 접속할때 가지고 오는 데이터의 타입입니다.
Welcome File list
요청의 목적이 불명확실할 때에 보내는 곳입니다.
Error Pages 처리
에러가 난 페이지를 따로 처리하는 것입니다.
리스너/필터 설정
필터 란?
요청을 거르거나 가지고 있는 데이터를 필터링 하는 것입니다.
리스너 란?
주어진 행동에 대해서 그 행동이 일어나는지 감시하는 것입니다.
보안
보안 기능을 제공합니다.
4. FrontController 패턴
web.xml에 다 정의하기가 너무 힘들기 때문에 최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨줍니다.
이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 생성 될 수 있습니다.
그래서 아래의 RequestDispatcher가 필요합니다
request와 response는 하나씩만 있을 수 있습니다.
하지만 FrontController에 설정한 데이터가 나타나면 해당 데이터에 대해
새로 request 와 response가 생기는데, 최초의 request 와 response에
덮어씌워지므로 기존 request 와 response를 유지 할 수 있는 방법이
필요한데 그것이 RequestDispatcher 입니다.
Spring은 외부에서 웹서버의 자원으로 직접적으로 접근하는것이 막혀있기 때문에 바로 자원에 접근하는 것이 아닌 톰캣으로 향하게 됩니다.
톰캣이 request와 response를 자동으로 나누어 객체로 만들어줍니다.
resquest 린?
서버에게 요청한 정보가 들어있는 객체
response 란?
request를 토대로 서버에서 응답한 데이터를 담을 객체
5. RequestDispatcher
필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request 와 response를 그대로 유지시켜줍니다.
페이지를 이동할 때 RequestDispatcher를 이용하면 이전 페이지에서의 데이터를 그대로 가져올 수 있습니다.
6. DisplatcherServlet
FrontController 패턴 과 RequestDispatcher의 기능을 합니다.
DispatcherServlet이 자동생성되어 질 때 수 많은 객체 생성(IoC)됩니다.
보통 필터들이고, 해당 필터들은 내가 직접 등록할 수도 있지만 기본적으로 필요한 필터들은 자동 등록 되어집니다.
7. 스프링 컨테이너
DispatcherServlet에 의해 생성되어지는 수 많은 객체들은 ApplicationContext에서 관리됩니다. 이것을 IoC라고 합니다..
ApplicationContext
IoC란 제어의 역전을 의미합니다.
개발자가 직접 new를 통해 객체를 생성하게 된다면 해당 객체를 가르키는 레퍼런스 변수를 관리하기 어렵습니다.
그래서 스프링이 직접 해당 객체를 관리합니다.
이때 우리는 주소를 몰라도 됩니다.
왜냐하면 필요할 때 DI하면 되기 때문입니다.
DI를 의존성 주입이라고 합니다.
필요한 곳에서 ApplicationContext에 접근하여 필요한 객체를 가져올 수 있습니다.
ApplicationContext는 싱글톤으로 관리되기 때문에 어디에서 접근하든 동일한 객체라는 것을 보장해줍니다.
ApplicationContext의 종류에는 두가지가 있는데 (root-applicationContext와 servlet-applicationContext) 입니다.