본문 바로가기

Programming/Web

Servlet 객체의 상속구조와 서블릿 프로그램 실행순서

반응형

서블릿 클래스 간의 관계

서블릿을 구현할 때는 javax.servlet.http 패키지에 있는 HttpServlet 클래스를 반드시 상속받아야 한다.

 

HttpServlet은 웹상에서 클라이언트 요청이 있을 때 해당 서블릿을 실행하는 모든 조건이 포함되어 있다.

 

 

Servlet 인터페이스

servlet은 서블릿 프로그램을 개발할 때 반드시 구현해야 하는 메소드를 선언하고 있는 인터페이스이다. 

 

init(); // 시작

service();

destroy(); // 종료

getServletConfig();

getServletInfo();

 

이는 서블릿 프로그램 실행의 생명주기와 관련된 메소드들이다.

 

 

GenericServlet 클래스

이 클래스는 서블릿 인터페이스를 상속하여서 클라이언트-서버 환경에서 서버단의 어플리케이션으로서 필요한 기능을 구현한 추상 클래스이다. Service() 메소드를 제외한 모든 메소드를 재정의하여 적절한 기능으로 구현하였다. GenericServlet 클래스를 상속하면 애플리케이션의 프로토콜에 따라서 매소드 재정의 구문을 적용해야 한다.

 

 

HttpServlet 클래스

이 클래스는 GeneticServlet 클래스를 상속하여 service() 메소드를 재정의하여 HTTP 프로토콜에 알맞은 동작을 수행하도록 구현한 클래스이다. HTTP 프로토콜 기반으로 하는 웹브라우저에서 요청을 전달받아서 처리하도록 하는 클래스이다. service() 메소드에는 요청방식에 따라서 doGet(), doPost() 등 정해진 사양의 메소드가 호출되도록 구현이 되어 있다.

 

 

 

 

 

서블릿 실행 순서 및 서블릿 객체의 생명주기

서블릿의 실행 순서

Java SE 프로그램은 개발자가 main() 메소드 안에 구현한 순서대로 실행이 된다. 즉 프로그램의 실행순서를 개발자가 제어한다. 그런데 java EE 기반의 프로그램은 실행의 흐름을 개발자가 제어하지 않고 컨테이너가 제어한다.

 

이렇게 개발자가 아닌 제 3자가 프로그램의 실행 흐름을 제어하는 것을 loC(Inversion of Control)이라고 한다. 제어의 역전. 서블릿이 이것에 해당한다. 그래서 Java EE 기반의 프로그램을 개발할 때는 먼저 애플리케이션 컨테이너들이 프로그램을 어떤 순서로 동작시키는 지를 알고 있어서 그 순서에 맞게 개발해야 한다.

 

1. 클라이언트로부터 처리 요청을 받는다.

클라이언트가 웹브라우저를 통해 요청을 보내면 웹서버는 이를 받아서 요청 정보의 헤더 안에 있는 URI를 분석한다. 요청받은 페이지가 서블릿이면 서블릿 컨테이너에 처리를 넘긴다. 서블릿 컨테이너는 요청받은 서블릿을 WEB-INF/classes 나 WEB-INF/lib 에서 찾아서 실행 준비를 한다.

 

2. 최초의 요청 여부

서블릿 컨테이너는 현재 실행할 서블릿이 최초의 요청인지를 판단한다. 실행할 서블릿 객체가 메모리에 없으면 최초의 요청이고, 이미 있으면 최초의 요청이 아닌 것으로 판단한다.

 

3. 서블릿 객체 생성

서블릿 컨테이너는 요청받은 서블릿이 최초의 요청이면, 해당 서블릿을 메모리에 로딩하고 객체를 생성한다. 일반 자바 객체의 경우 new 명령문으로 여러 개의 객체를 언제든지 직접 생성할 수 있지만, 서블릿은 최초 요청이 들어왔을 떄 한 번만 객체를 생성하고 이때 생성된 객체를 계속해서 사용하게 된다.

 

 

콜백 메소드와 서블릿 객체의 생명주기

콜백 메소드? callback method 란 어떤 객체에서 어떤 상황이 발생하면 컨테이너가 자동으로 호출하여 실행되는 메소드를 의미한다. 이러한 콜백 메소드들이 서블릿을 실행하게 된다. HttpServlet 클래

mrlazydev.tistory.com

 

4. init() 메소드 실행

서블릿 객체가 생성된 다음에 호출되는 메소드로서 서블릿 인터페이스에 선언되어 있고 기능은 GeneticServlet 클래스에 구현되어 있다. init() 메소드는 처음 요청할 때 서블릿 객체가 생성된 다음 호출되기 때문에 주로 서블릿 객체의 초기화 작업이 구현되어 있다. Genetic Servlet 내용에서 구현된 내용을 변경하고 싶을 경우 오버라이드하여 원하는 내용으로 변경하면 된다.

 

5. service() 메소드 실행

실행하는 서블릿의 요청 순서에 상관없이 클라이언트의 요청이 있을 때마다 실행된다. 그래서 여기에는 실제로 서블릿에서 처리해야 하는 내용이 구현되어 있다. servlet 인터페이스에 이미 선언되어 있고, genericServlet 클래스에 추상 메소드로 선언되어 있기 때문에, httpServlet 클래스에 메소드가 실제로 구현되어 있다. httpservlet의 내용을 변경하고 싶을 경우 service() 메소드를 오버라이드하여 사용하면 된다.

 

 

6. 실행결과 반환

service() 메소드가 끝나면 서버에서의 실행은 끝이 난다. 서블렛 프로그램 실행이 완료되고 난 뒤에는 서블릿 컨테이너가 실행결과를 웹서버에 전달하고 웹서버는 서비스를 요청한 클라이언트에 응답response한다.  이로써 웹에서 하나의 request 에 대한 처리가 완료된다.

 

 

 

반응형