Spring

서블릿이란 ?

라우브 2020. 7. 31. 22:16

서블릿이란 ?

  • Java EE은 웹 애플리케이션 개발용 스펙과 API를 제공한다.
  • 각 요청 마다 Thread를 사용한다 (생성하거나, pool에서 가져와서 사용)
  • 가장 중요한 클래스 중 하나가 HttpServlet

그렇다면 서블릿 이전에 사용하던 기술은 ??

  • Common Gateway Interface
    • 서블릿과는 달리 요청 당 Thread 가 아닌 Process를 만들어 처리 -> 속도가 느리다

서블릿의 장점

  • 요청 당 Process가 아닌 Thread로 처리하기 때문에 빠르다.
  • Java 기반이므로 플랫폼 독립적이다.
  • Java 기반이므로 Java가 제공하는 보안을 사용할 수 있기 때문에 보안성 좋다.
  • 이식성

서블릿은 누가 관리하는가 ??

: 서블릿 엔진 혹은 서블릭 컨테이너가 서블릿을 관리한다. (ex. 톰캣, 제티 .. )

 

서블릿 컨테이너의 역할

  • 세션 관리
  • 네트워크 서비스
  • MIME 기반 메세지 인코딩 및 디코딩
  • 서블릿 라이프 사이클 관리

서블릿 생명주기

  • 서블릿 컨테이너가 서블릿 인스턴스의 init() 메서드를 호출하여 초기화.
    • 이때, 최초 한 번은 초기화하고, 다음 요청부터는 이 과정을 생략.
  • 서블릿이 초기화 된 이후에, 각 요청은 별도의 Thread로 처리하고 이때 서블릿 인스턴스의 service()메서드를 호출한다.
    • service()는 HTTP Method에 따라 doGet() 혹은 doPost()를 실행한다.
    • 따라서 보통은 doGet() 또는 doPost()를 구현한다.
  • 서블릿 컨테이너의 판단에 따라 해당 서블릿을 메모리에서 내려야 할 시점에 destroy() 메서드를 호출한다.

 

public class HelloServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("Hello Servlet init");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }

    @Override
    public void destroy() {
        System.out.println("Hello Servlet destroyed");
    }
}

 

 

위 Servlet의 실행 결과는 아래와 같다. 

최초 한 번 init이 실행되고, 이후 연결이 끊어질 때 까지 init은 재호출되지 않는다.

init을 통해 Servlet이 초기화 되면 get요청이 올 때마다 doGet메서드가 실행되며, 연결을 종료할 때

destroy()함수가 호출되는 것을 볼 수 있다.

'Spring' 카테고리의 다른 글

Database Transaction과 데이터 동기화 -1  (0) 2021.08.01
스프링 MVC 구성 요소  (0) 2020.08.02
DispatcherServlet이란  (0) 2020.08.02
서블릿 리스너와 서블릿 필터  (0) 2020.08.01
스프링 MVC 소개  (0) 2020.07.30