본문으로 바로가기

[JAVA] Servlet :: Servlet(서블릿) 이란?

category Program/JAVA 2016. 12. 7. 11:07

1. 정의

자바 플랫폼에서 동적인 웹을 개발할 때 사용하는 기반 기술

웹에서 자바 프로그래밍을 가능하게 함

사용자의 요청(Request)을 받아 요청한 대로 처리해주는(doGet, doPost) 일을 한 후 처리 결과를 사용자에게 응답(Request)해줌

 

 

2. 동작 과정

ㄱ. 사용자의 url 요청

url 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹서버 측에 url과 서블릿 클래스를 미리 매핑시켜 놓은 배포 서술자가 필요

(배포 서술자 : web.xml => 웹서버가 알아챌 수 있도록 적어놓은 파일)

 

ㄴ. request, response 객체 생성

웹 컨테이너는 지금 받은 요청을 처리하기 위해 HTTP 요청(request)을 처리하기 위한 request 객체와 HTTP 응답을 위한 response 객체를 생성

 

ㄷ. 서블릿 인스턴스와 스레드 생성

request, response 객체 생성 뒤 사용자의 url 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자를 통해 알아냄

- 한 번도 실행된 적 없는 경우 : 새로 인스턴스를 생성(메모리에 로드함)

init() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성함

- 이미 인스턴스가 존재할 경우 : 기존의 인스턴스에 스레드만 하나 새로 생성

 

* 각 서블릿 인스턴스는 웹컨테이너당 하나씩만 존재하므로 init() 메소드는 각 서블릿당 한 번씩만 호출됨

 

ㄹ. service() 메소드 호출, 서블릿 클래스 작성

스레드가 생성되면 각 스레드에서 Service() 메소드 호출

- get방식 : doGet() 메소드가 response.request 객체를 인자로 호출

- post방식 : doPost() 메소드가 response.request 객체를 인자로 호출

 

ㅁ. 응답과 스레드의 소멸

doGet, doPost 메소드가 호출되어 사용자 요청에 따른 동적 웹페이지를 생성하면 그 결과물이 담긴 request 객체를

웹컨테이너가 HTTP response 형태로 바꿔 웹서버로 전송

사용이 끝난 request, response 객체를 소멸시키고 스레드 종료

 

 

* 클라이언트가 url 요청

  => 웹서버 : 요청된 서블릿 확인 후 컨테이너로 요청

  => 컨테이너 : request, response 생성 후 web.xml을 참조하여 해당 서블릿의 스레드 생성 후 service 메소드 호출

  => sevice() 메소드에서 요청 방식에 따라 doGet, doPost 메소드 호출

  => doGet, doPost 메소드에서 응답 생성

참고 : http://diaryofgreen.tistory.com/61