클라이언트 요청을 처리하고, 그 결과를 다시 클라이언트에게 전송하는 servlet 클래스의 구현 규칙을 지킨 자바 프로그램.
이전의 웹 프로그램들은 클라이언트의 요청에 대한 응답으로 만들어진 페이지를 넘겨 주었으나, 현재는 동적인 페이지를 가공하기 위해서 웹 서버가 다른 곳에 도움을 요청한 후 가공된 페이지를 넘겨주게 된다. 이때 서블릿을 사용하게 되면 웹 페이지를 동적으로 생성하여 클라이언트에게 반환해 줄 수 있다.
일반적으로 클라이언트와 서버를 크게 보자면 아래와 같이 구성되어 있다.

요청을 보낼때에는 request에 담아서 http방식으로 https://localhost:8080/api 과 같은 형식으로 보내게 된다.
클라이언트의 요청이 먼저 만나게 되는 건 dispatcher servlet이다.
이 dispatcher servlet은 handler mapping을 사용하여 요청 URL을 보고 Handler를 판단하고, 또한 Handler 실행 전에 전처리, 후처리로 실행해야 할 인터셉터 목록을 결정한다.
위 에서 언급하는 Handler가 Controller이다.

일치하는 어노테이션이 있으면 해당하는 어노테이션을 가지고있는 메소드를 실행 시킨다.

해당 메소드를 실행시켜서 요청에 맞는 로직을 실행한 뒤 결과를 보낸다.

이후 dispatcher servlet은 그렇게 가공된 요청을 response 실어서 클라이언트에 보내버린다.

하지만 일치하는 어노테이션이 존재하지 않으면 핸들러 매핑은 없다고 생각하고 resource/static 폴더에 위치한 index.html 파일을 그대로 응답에 실어서 클라이언트에 보내버린다.
웹 서버는 클라이언트로부터의 HTTP 요청을 받아들여 정적인 콘텐츠를 제공하고, 동적인 요청은 웹 애플리케이션 서버(WAS)로 전달하는 역할을 수행합니다.
HttpServletRequest 및 HttpServletResponse 인스턴스 생성HttpServletRequest에 요청 정보가 담겨 처리됨