본문 바로가기
Backend/Servlet & JSP

[Servlet & JSP] Servlet 라이프 사이클

by Forsaken Developer 2023. 5. 18.
728x90
728x90

[Servlet & JSP] Servlet 라이프 사이클

출처 - tutorialspoint

클라이언트로부터 온 요청을 웹서버가 받고 정적인 리소스가 존재하지 않는다면 서블릿 컨테이너에게 요청을 위임한다.

서블릿 컨테이너는 요청 받은 서블릿에 대한 인스턴스를 생성하고 요청 단위로 스레드를 생성한다.

생성된 스레드들은 생성된 서블릿을 호출하는 방식으로 동작하며 최초에 한번 서블릿 인스턴스를 생성하면 다시 생성하지 않고 존재하는 인스턴스를 다른 스레드가 사용하여 속도가 빨라진다는 장점이 있다.

  • init : 최초에 인스턴스가 생성되었을 때 한 번 호출되는 메소드
  • service : 요청 방식이 get인지 post인지 상관없이 먼저 호출되는 메소드로 요청 방식에 따라 doGet, doPost를 호출
  • destroy : 서블릿 컨테이너가 종료될 때 호출되는 메소드

servlet의 계층 구조

출처 -techguruspeaks

Servlet interface를 통해서 init, service, destory과 같은 생명주기 메소드를 정의하고 GenericServlet에서 이를 추상메소드 형태로 구현하고 있다.

HttpServlet에서는 요청방식에 따라 다른 메소드가 동작하도록 service를 구현했다.

이런 방식으로 결합 관계를 낮추도록 설계 되어있다.

Servlet Mapping

xml 방식

서블릿 컨테이너의 서블릿에 대한 설정은 Deployment Descriptor 즉 web.xml 파일을 통해서 가능하다.

web.xml은 어플리케이션에 대한 설정정보를 가지고 있는 파일로 이 정보를 바탕으로 서블릿 컨테이너가 구동된다.

servlet 태그안에 servlet 별칭과 servlet full class명을 서술하여 서블릿을 등록한다.

servlet-mapping이라는 태그안에 설정한 servlet 별칭과 접근 명칭을 서술하여 서블릿을 매핑한다.

annotation 방식

servlet 2.5 버전 이상부터 annotation 방식으로 servlet mapping이 가능하다.

webServlet에 mapping 경로를 서술하기만 하면 쉽게 mapping이 가능하다.

주의할 점은 mapping 경로가 다른 서블릿과 겹치게 되면 톰캣 자체가 실행이 되지않는다.

xml에 설정 할 수 있는 loadOnStartup과 같은 설정도 annotation을 통해서 가능하며 mapping외의 설정 정보가 있을 경우에는 value를 붙여 서술한다.

최초 서블릿 인스턴스가 생성된 이후 계속 get 요청을 하면 인스턴스를 새로 생성하지 않고 service 메소드만 호출된다.

728x90
반응형

댓글