JSP를 처리하기 위해선 JSP파일과 서블릿 컨테이너, 그리고 웹 서버가 필요하다.
JSP 파일은 HTML에 java 코드가 들어간 파일이며, 서블릿 컨테이너는 JSP파일을 서블릿으로 변환하고 실행하는 역할을 한다.

서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 서블릿 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다. 즉, 클라이언트가 어떤 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램을 말한다.
서블릿은 자바 서블릿 API를 사용하여 작성되며, 일반적으로 HttpServlet 클래스를 상속받아 구현된다. 서블릿을 작성하려면 doGet, doPost 등의 메서드를 오버라이딩하여 HTTP 요청에 대한 처리를 구현하게 된다.
서블릿의 동작 과정은 다음과 같다.
서블릿 컨테이너란 서블릿을 관리해주는 컨테이너이다. 서블릿이 정의서라면 컨테이너는 그 정의서를 보고 수행한다고 볼 수 있다.
클라이언트 요청을 받아주고 응답을 할 수 있게 웹 서버와 소켓으로 통신하며 JSP(자바 서버 페이지)와 서블릿이 작동하는 환경을 제공해준다. 대표적으로 톰캣이 있다.
서블릿 컨테이너의 역할은 다음과 같다.

웹 서버는 보통 정적인 컨텐츠를 응답하는 역할을 하며, 동적 페이지를 요구하는 응답이 왔을 경우, 서블릿 컨테이너로 요청을 전달한다.

서블릿은 자바 소스코드 속에 HTML코드가 들어가 있는 형태이다.
JSP는 반대로 HTML 코드 속에 자바 코드가 들어가 있는 구조이다.
웹 서버가 사용자로부터 서블릿에 대한 요청을 받으면 서블릿 컨데이너에 그 요청을 넘긴다.
요청 받은 컨테이너는 HTTP Request와 HTTP Response 객체를 만들어서 서블릿 doPost, doGet 메서드 중 하나를 호출한다.
서블릿 -> 로직 실행 후, 결과는 out객체의 println메서드를 사용해서 HTML문서 작성
JSP -> 비즈니스 로직과 프리젠테이션 로직 분리, jsp 파일을 서블릿으로 변환(.java)하고 컴파일을 통해 .class 생성
동적인 페이지를 요청할 경우, 모든 응답을 println 메서드를 사용해서 HTML 코드를 문자열로 작성해야한다.
비즈니스 로직과 화면 로직이 한 곳에 섞여 있어 가독성이 떨어지고, 만약 HTML 변경이 필요하다면 코드 변경 후 서블릿을 재컴파일을 해야 하는 단점이 있다.
반면, JSP는 HTML 코드에 java 코드가 들어가 있는 구조로 동적 콘텐츠를 생성할 수 있고, 비즈니스 로직과 프레젠테이션 로직을 분리할 수 있다.
🌟 추가 질문
📍 서블릿 컨테이너 즉, 톰캣이 요청을 받았을 때 그 요청을 어떤 서블릿으로 전달해야 되는지 어떻게 알 수 있을까?
Web.xml 파일에서 사용할 서블릿을 등록하고, 요청 URL에 맞는 서블릿들을 매핑해준다.
참고 자료
[JSP] 서블릿(Servlet)이란?
jsp 필수 이해 요소(servlet,jsp처리과정, 버퍼)