톰캣은 흔히들 와스 WAS(Web application Server) 라고 한다.
와스는 웹 서버와 서블릿 컨테이너의 결합으로 다양한 역할 수행하는 서버다.
위키백과에 따르면 아래와 같이 설명하고 있다.
아파치 톰캣은 아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너만 있는 웹 애플리케이션 서버이다. 톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바서버 페이지와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다.
내용을 조금 더 풀어서 설명하자면,
우리가 페이지에 접속했을 때 렌더링용 html(내용이 바뀌지 않는), css, image file 과 같은 정적 페이지는
web server를 통해서 응답을 받고, (이때 웹서버는 아파치를 주로 사용한다)
그리고 동적인 페이지 (예를들어 디비로 부터 값을 받아서 변경해줘야하는 페이지 등)은
web server 가 받으면 was server로 넘겨준다.
was server 내부는 어떻게 되어 있을까?
위에서 설명했다싶이 was는 내부에 컨테이너 라는 녀석이 있는데,
이 컨테이너는 동적인 처리가 필요한 작업을 받았을 때
httpServletRequest, httpServletResponse 라는 빈 객체를 만들고 새 쓰레드에 할당 시킨다.
해당 작업에 대한 응답객체와 요청객체를 만들어 둔다.
동시에 Web.xml이라는 파일에 접근해서 이 요청을 누가 처리 할지 알아오게 되는데,
이를 처리 하는 친구가 서블릿 이다.
그럼 이 서블릿에게 doGet()과 doPost를 실행 시킨다.
즉 httpServletRequest에서 전달 받은 데이터 들로 새로운 동적 페이지를 만든다.
이렇게 결과 페이지가 만들어지면, httpServletResponse 에 담아서 다시 web 한테 보내 준다.
이때 web이 알아들을 수 있게 httpResponse 형태로 가공해서 web 한테 주면 작업이 완료 된다.
(참고로 던져 주면서 기존 만들어 둔 스레드는 제거 한다)