Servlet이 무엇인가?

  • A servlet is a Java programming language class 
    used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by web servers. For such applications, Java Servlet technology defines HTTP-specific servlet classes.

 

  • Servlet 인터페이스 java docs에서는
    A servlet is a small java program that runs within a Web server.
    라고 말하고 있는데, 프로그램이라고 얘기하자니 좀 들어맞지 않는 구석이 있어 이해하기가 좀 난해함.
  • 그렇다고 클래스라고 딱 말하자니 용어를 통칭해서 쓰는 감이 있어서, 그냥 요청을 처리하는 actor 정도로 바라보면 됨.
    • 서블릿 클래스, 서블릿 인스턴스.. 이런 식으로 부르기도 하니까.
    • 그래도 개념이 헷갈리면 `` Servlet, HttpServlet`` 클래스를 보면 이해하는데 좀 도움이 된다.

 

Servlet의 구조?

  • 서블릿은 요청을 받아서 처리한 후 응답을 내려주는 역할을 하는데
  • `` init() - service() - destroy()`` 순으로 호출되며
  • `` HttpServlet``의 경우 `` service()``에서 `` doGet(), doPost()`` 등을 호출한다
    • 우리가 작성하는 코드는 사실상 `` doGet()`` 같은 메서드를 override해서 작성하게 되는 것.

 

Servlet Container (=tomcat)

  • 요청을 받으면 서블릿은 자기가 알아서 실행되는게 아니라 서블릿을 실행하는 주체가 따로 있는데, 이게 바로 서블릿 컨테이너.
  • tomcat이 바로 서블릿 컨테이너
  • tomcat은 스레드풀을 가지고 있다가 요청이 들어오면 스레드에서 서블릿 실행하여 요청을 처리한다. (`` service()``를 호출)
    • 이 때 tomcat은 서블릿 실행하면서 HttpServletRequest를 인자로 넘겨준다.
    • * HttpServlet의 service() 메서드 시그니처

```java

void service(HttpServletRequest req, HttpServletResponse resp) { ...

```

 

DispatcherServlet은 Spring에서 구현한 Servlet

```java 

Servlet -> GenericServlet -> HttpServlet (javax.servlet 소속)

-> HttpServletBean -> FrameworkServlet -> DispatcherServlet (org.springframework.spring-webmvc 소속)

```

스프링의 컨트롤러가 곧 서블릿에 들어가는 바디가 되므로,(doGet() 같은.)

컨트롤러를 서블릿이라고 퉁쳐서 부르는 경우도 종종 있다.

 

참고

https://dadadamarine.github.io/java/spring/2019/05/02/spring-MVC-%EA%B5%AC%EC%A1%B0.html