웹 서버는 웹페이지를 저장하고, 사용자가 해당 페이지에 접속할 때 그 페이지를 보내주는 역할을 한다. 예를 들어, 사용자가 "www.example.com"에 접속하면, 웹 서버는 해당 도메인에 맞는 웹페이지를 찾아서 사용자의 브라우저에 전송한다.
주로 정적인 콘텐츠(이미지, HTML 파일, CSS 파일 등)을 제공하는데 사용된다. 즉, 페이지의 내용이 자주 변경되지 않는 경우에 사용된다.

WAS는 동적인 콘텐츠를 처리하는 데 사용된다. 이는 사용자의 요청에 따라 즉석에서 생성되는 콘텐츠를 말한다. 예를 들어, 사용자가 로그인을 하거나 데이터베이스와 상호작용하는 기능을 실행할 때, WAS가 이를 처리한다.
WAS는 웹 애플리케이션을 실행하기 위한 환경을 제공한다. 이 환경에는 프로그래밍 언어(Java, PHP, Python 등)의 실행 환경, 데이터베이스와의 통신을 담당하는 기능, 세션 관리 등이 포함된다.
예를 들어, 사용자가 로그인을 시도하면 WAS는 사용자의 정보를 확인하고 인증을 처리하여 로그인 여부를 판단하고 이에 따라 적절한 화면을 보여준다.

❗따라서, 웹 서버는 정적인 콘텐츠를 제공하고 사용자의 요청을 전달하는 역할을 하며, WAS는 동적인 콘텐츠를 생성하고 실행하는 역할을 한다. 두 가지를 함께 사용하여 웹 애플리케이션을 구축한다.

서블릿(Servlet)은 자바로 웹 애플리케이션을 개발할 때 사용되는 기술이며, 웹 애플리케이션 서버에서 실행되는 자바 클래스이다. 이 클래스는 HTTP 요청을 처리하고, 동적으로 웹페이지를 생성하거나 데이터를 처리할 수 있다.
간단하게 설명하면, 서블릿은 웹 애플리케이션에서 요청과 응답을 처리하는 자바 프로그램이다. 서블릿은 웹 서버와 WAS 사이에서 동작하며, 보통 웹 애플리케이션 서버(예: Apache Tomcat, Jetty 등)에서 실행된다.

웹 서버는 클라이언트로부터 요청을 받으면 해당 요청을 서블릿 컨테이너(웹 애플리케이션 서버)로 전달한다. 이때, 요청은 HTTP 프로토콜을 통해 전송된다.
서블릿 컨테이너는 클라이언트의 요청에 해당하는 서블릿을 인스턴스화한다. 이때, 서블릿 클래스는 javax.servlet.Servlet 인터페이스를 구현한 클래스이다.
서블릿 컨테이너는 클라이언트의 요청에 대해 서블릿의 service() 메서드를 호출한다. 이 메서드는 요청의 종류에 따라 doGet(), doPost(), doPut() 등의 메서드를 호출하게 된다.
서블릿은 클라이언트의 요청에 따라 적절한 작업을 수행한다. 예를 들어, 사용자가 로그인 페이지에 접속했다면, 서블릿은 로그인 폼을 보여주거나 로그인 정보를 확인하는 등의 작업을 수행할 수 있다.
서블릿은 요청을 처리한 후에 HTTP 응답을 생성하여 클라이언트에게 전송한다. 이때, 응답은 HTML, XML, JSON 등의 형식으로 작성될 수 있다.
웹 서버는 서블릿이 생성한 응답을 클라이언트에게 전달한다. 클라이언트는 받은 응답을 해석하여 화면에 표시하거나 다음 동작을 수행한다.
이처럼 서블릿은 클라이언트의 요청을 처리하고, 동적인 웹 페이지를 생성하여 응답을 보내는 중요한 역할을 한다.

서블릿이 동작할 수 있도록 필요한 실행 환경을 제공하는 것이
서블릿 컨테이너이다. 서블릿 컨테이너는 웹 애플리케이션 서버의 일종으로,서블릿의 라이프사이클관리와 요청/응답 처리를 담당한다.
서블릿 라이프사이클 관리: 서블릿 컨테이너는 서블릿의 인스턴스 생성, 초기화, 서비스 메서드 호출, 소멸 등의 라이프사이클을 관리한다. 이를 통해 서블릿이 요청을 처리할 수 있는 상태를 유지한다.
HTTP 요청 처리: 클라이언트의 HTTP 요청을 받아들이고, 해당 요청을 처리할 적절한 서블릿을 찾아서 호출한다. 이때, 서블릿은 doGet(), doPost() 등의 메서드를 통해 요청을 처리한다.
HTTP 응답 생성: 서블릿이 처리한 결과를 기반으로 HTTP 응답을 생성한다. 이때, 서블릿은 HttpServletResponse 객체를 사용하여 응답을 생성하고, 클라이언트에게 전송한다.
스레드 관리: 서블릿 컨테이너는 요청당 하나의 스레드를 사용하여 요청을 처리한다. 이를 통해 동시에 여러 요청을 처리할 수 있다.
보안 관리: 서블릿 컨테이너는 보안 관련 설정을 관리하고, 보안 기능을 제공한다. 이를 통해 웹 애플리케이션의 보안을 강화할 수 있다.
(출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard)