Servlet은 Java에서 웹 애플리케이션을 개발하기 위한 표준 API로, HTTP 요청을 처리하고 응답을 생성한다. javax.servlet.http.HttpServlet(현 jakarta)를 상속받아 구현 할 수 있다.
구현예시
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/plain");
response.getWriter().write("Hello, Servlet!");
}
}
이후 Servlet을 web.xml에 등록하여 사용 할 수 있다.

Servlet Container에서는 요청을 받으면 HttpServletRequest,HttpServletResponse 객체를 만든다.Spring MVC 프레임워크에서 요청-응답 흐름을 처리하는 중심 역할을 수행하는 Front Controller이다.
| FrontController란
모든 요청을 받아 매핑에 따라 다시 다른 컨트롤러로 요청을 전달하는 중앙 컨트롤러이다.
DispatcherServlet은 위 설명처럼 클라이언트의 모든 요청을 가로채고, 이를 처리할 컨트롤러로 전달한 뒤, 결과를 뷰로 렌더링하고 응답을 보낸다.

위 사진처럼 DispatcherServlet이 HandlerMapping을 통해 적절한 컨트롤러를 찾고, HandlerAdaptor를 통해 Controller로 요청을 위임한다.
요청이 처리되면 다시 응답을 클라이언트에게 전송한다.
+ HandlerAdapter는 Controller의 구현이 다양해져서 이후에 추가되었다.
요청을 받아 적절한 컨트롤러로 매핑한다.라는 역할은 이미 앞서 설명한 Servlet Container이 가지고 있었다. 그럼에도 DispatcherServlet이 등장한 이유는..
Servlet Container를 사용할 때는 인증, 로깅, 예외처리 같은 공통로직이
각각의 Servlet에 모두 들어있어야 했다.
또한 비즈니스 로직과 뷰가 섞여있어 유지보수에 어려움이 있었다.
이러한 이점 때문에 기존 Sevlet, Servlet Container를 대체하고,
DispatcherServlet과 함께 MVC 패턴이 정착 할 수 있게 되었다.
Servlet과 Servlet Container는 대체되었다고 보기 어렵습니다.
Dispatcher Servlet이 그전에 Servlet Container가 하던 요청 처리, 매핑 역할을 하는것은 맞지만, 여전히 Servlet과 Servlet Container는 사용됩니다.
Dispatcher Servlet이라는 이름에서부터 Servlet이 사용됨을 알 수 있습니다.
또한 넓은 의미에서 각각의 Contoller도 Servlet으로 볼 수 있고, 직접적으로 우리가 Servlet과 관련된 코드를 짤때는, Filter 작업을 할 때 입니다.
Filter는 Dispatcher Servlet 앞에서 요청을 가로채어 이를 처리합니다. 그러기 위해서 Filter 들은 Servlet Container에 등록되어 Filter Chian을 이룹니다.
Filter의 init(), doFilter(), destory() 의 메서드와
Servlet의 init(), service()→doGet(), destory() 를 보면, Filter가 Servlet이며 메서드에서도 그 특징을 가져왔음을 알 수 있습니다.
