본문 바로가기

IT 서비스 바라보기/Programming

서블릿 실행의 시점과 목적


  • init()

호출되는 시점
컨테이너는 서블릿 인스턴스를 생성한 다음 init() 메소드를 호출합니다. 이 메소드는 service() 메소드 전에 실행되어야 합니다.

목적
클라이언트의 요청을 처리하기 전에 서블릿을 초기화할 기회를 주는 것입니다.

재정의
가능하다. 초기화할 코드가 있다면 init() 메소드를 재정의하세요(데이터베이스에 대한 접속, 다른 객체에 서블릿을 등록하는 등).

  • service()

호출되는 시점
최초 클라이언트의 요청을 받았을 때, 컨테이너는 새로운 스레드를 생성하거나, 아니면 스레드 풀로부터 하나를 가지고 와서 서블리스이 service() 메소드를 호출합니다.

목적
클라이언트의 HTTP 메소드(GET, POST 등)를 참조하여 doGet()을 호출할지, doPost()를 호출할지, 아니면 다른 메소드를 호출할지 판단합니다.

재정의
거의 하지 않는다. service() 메소드를 재정의할 필요는 없습니다. doPost() 나 doGet()을 재정의하여 HttpServlet 의 service() 가 이를 실행하도록 하면 됩니다.

  • doGet() 또는 / 혹은 doPost()

호출되는 시점
service() 메소드가 클라이언트의 HTTP 메소드(GET, POST 등)를 참조하여 doGet() 또는 doPost()를 호출합니다. 여기서 doGet(), doPost() 만 언급하는 이유는 이것말고 나머지는 사용할 경우가 거의 없기 때문입니다.

목적
여기에다가 코딩을 하면 됩니다. 어떤 웹 애플리케이션이든지, 무엇을 하든지 관계없이 이곳이 바로 그 작업을 하는 곳입니다. 물론 다른 객체에 있는 다른 메소드를 호출할 수 있습니다. 하지만 모두 여기에서부터 시작합니다.

재정의
항상, 둘 중 하나는 반드시(doGet() 이든 doPost() 든) 해야함. 서비스 하고자 하는 메소드를 재정의하세요. 만약 doPost()를 재정의하지 않았다면, 컨테너는 "이 서블릿은 HTTP POST를 지원하지 않는구나" 라고 생각할 것입니다.