- 톰켓
- 서블릿 컨테이너
- web.xml
- FrontController 패턴
- RequestDispatcher
- DispatchServlet
1. 톰켓 : 웹이 이해하지 못하는 언어(java)들을 컴파일해서 html 파일로 만들어 웹에서 실행 가능하게 만듬
웸서버는 흔히 우리는 아파치를 사용한다. 그럼 컴퓨터에 특정한 폴더를 지정한다. c:\work 를 만들고 이 work 폴더를 공유한다고 하자.
그럼 폴더 안에 수많은 자원이 있을 것이다. 어떤 얘가 자원을 request 하면 아파치는 그 자원을 response 하면 된다.
만약 얘가 요청을 하는게 .jsp 파일 혹은 java code가 적혀있는 것을 요청하면 아파치는 자바 코드를 이해할 수 없다. 그래서 톰켓이라는 얘를 단다. 자기가 이해할 수 없는 파일이 오면 제어권을 톰켓에게 준다.
그리고 이 톰켓은 .jsp 파일에 있는 모든 자바파일을 컴파일 하고, 컴파일이 끝나면 컴파일된 데이터를 html에 덮여쓴다. → 이 과정에서 톰켓을 이용해 웹 요청을 가능하게 한다. (웹은 html, css, js만 인식 할 수 있기 때문에 이를 인식하게 도와주는 것이 톰켓이다.)
톰켓은 URL(location)을 접근할 수 없고 URI(identify)로만 접근이 가능 하도록한다.
ex) URL : http://naver.com/a.png
URI : http://naver.com/picture/a
2. 서블릿 컨테이너

서블릿 컨테이너 실행 순서
- 서블릿 컨테이너는 클라이언트로 부터 처음 요청이 들어오면 현재 실행할 서블릿이 최초의 요청인지 판단하고 없으면 해당 서블릿 객체를 새로 생성한다. 이작업은 최초 1회만 일어난다. → 두 번째 요청부터는 재사용한다.
- 서블릿 객체안에서 init()메소드가 실행된다. init() 메소드는 해당 사용자 서블릿이 최초 생성되고 바로 호출되는 메소드이다.
- 서블릿 객체안에서 service() 메소드가 실행된다. service() 메소드는 최초의 요청이든 2번쨰 요청이든 계속 호출되는 메소드이다.
- 그 후 service() 메소드에서 post, get, put, delete에 대해서 요청한 것을 실행
3. web.xml가 하는 일
- ServletContext의 초기 파라미터
- Session의 유효시간 설정
- Servlet/JSP에 대한 정의
- Servlet/JSP 매핑
- Mime Type 매핑
- Welcome File list
- Error Pages 처리
- 리스너/필터 설정
- 보안
4. FrontController 패턴
최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. (web.xml에서 모두다 정의하기 힘들기 때문)
이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new될 수 있다. 그래서 이를 방지하기 위해 RequestDispatcher가 필요하다.
5. RequestDispatcher
필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다.
6. DispatchServlet
앞서 존재하던 FrontController 패턴을 직접짜거나 RequestDispatcher를 직접구현할 필요가 없다.
왜냐면 Spring에는 DispatchServlet이 존재하기 때문이다.
DispatchServlet : FrontController 패턴 + RequestDispatcher
DispatchServlet이 자동생성되어 질 때 수 많은 객체가 생성(IoC)된다. 보통 필터들이다. 해당 필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들은 자동 등록 되어진다.
DispatchServlet : 주소분배 해주는 녀석
'Develop > Spring' 카테고리의 다른 글
| '코드로 배우는 스프링 웹 프로젝트' 정리(Controller) (0) | 2022.06.23 |
|---|---|
| Spring 궁금했던거 (0) | 2022.03.25 |
| Springboot, Spring 개념정리 2 (0) | 2022.03.22 |
| Springboot, Spring 개념정리 1 (0) | 2022.03.22 |
| Spring 웹 개발 기초 (0) | 2022.03.22 |