본문 바로가기

java

Servlet

서블릿(Servlet)이란?

: 서블릿(Servlet) Server Side Applet - 서버 사이드의 자바 응용 프로그램이란 뜻으로 단적으로 말하자면 웹 서버 상에서 실행되는 자바의 클래스 파일이라고 할 수 있습니다. 기본적으로 자바의 모든 API를 사용할 수 있습니다서블릿은 반드시 javax.servlet.Servlet 인터페이스를 구현(Implements)해서 작성해야 합니다.

 

서블릿과 자바 클래스 차이

: 서블릿과 자바클래스의 다른 점은 입력과 출력을 HTTP 프로토콜의 요청(Request)과 응답(Response)의 형태로

  다룬다는 점만 다를 뿐입니다.

 

서블릿(Servlet)의 동작 원리

 

: 서블릿은 서블릿 컨테이너라는 실행환경 하에서만 동작이 가능합니다.

 

(1) 사용자의 URL 요청

: 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버에 알리기 위한 단계로써 사전에 웹 서버측에 URL과 서블릿 클래스를

   미리 매핑시켜 놓은 배포 서술자(Deployment Descriptor)를 통해 사용자의 URL 요청이 특정한 서블릿 클래스를 필요한다고 알립니다.

 

   , 사용자의 URL이 서블릿을 요청한다는 것을 웹 서버가 알아 챌 수 있도록 하는 단계라고 생각해두면 되겠습니다.

 

(2) request, reponse 객체 생성

: 웹 컨테이너는 사용자로부터 HTTP 요청(request) 처리하기 위한 request 객체와 HTTP 응답(response)을 위한

  response 객체를 생성합니다.

 

  reqeust 객체는 javax.servlet.http.HttpServletRequest 객체 타입으로 생성되고

  reponse 객체는 javax.servlet.http.HttpServletResponse 객체 타입으로 생성됩니다.

 

 (3) 서블릿 인스턴스와 스레드 생성

: request, respnose 객체의 생성 뒤 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서울자를 통해 알아냅니다.

  만일 요청 받은 URL의 서블릿 클래스가 웹 컨테이너에서 한번도 실행된 적이 없거나 현재 메모리에 생성된

  인스턴스(프로세스)가 없다면 새로 인스턴스(instance)를 생성(메모리에 로드)하고 init() 메소드를  실행하여

  초기화 한 뒤 스레드를 하나 생성합니다.

 

  각 서블릿 인스턴스는 웹 컨테이너당 하나만 존재하기 때문에 init() 메소드는 각 서블릿 당 한번씩만 호출됩니다. 그리고 기존

  인스턴스가 존재할 경우 새로 인스턴스를 생성하지 않고 스레드만 새로 하나 생성합니다.

 

(4) service() 메소드 호출과 서블릿 클래스 실행

: 스레드가 생성되면 각 스레드에서 service() 메소드가 호출됩니다.service() 메소드가 호출되면 HTTP 요청 방식이

  GET방식일 경우 doGet() 메소드가, POST방식일 경우 doPost() 메소드가 request, response 객체를 인자로 자동으로 호출합니다.

  실제 동적인 웹 페이지를 생성할 수 있는 코드를 만들어야 하는 부분이 doGet() 혹은 doPost() 메소드입니다.

 

(5) 응답과 스레드 소멸

: doGet() 또는 doPost() 메소드가 호출되어 사용자의 요청에 따른 동적인 웹페이지를 생성하게 되면 그 결과물이 담긴

  response 개체를 웹 컨테이너가 HTTP 응답(Response) 형태로 바꾸어 웹 서버로 전송하게됩니다. 그리고 사용이

끝난 request 객체와 response 객체를 소멸시키고 스레드를 스레드를 종료하게 됩니다.

'java' 카테고리의 다른 글

filter  (0) 2015.02.23
web  (0) 2015.02.09
JSP  (0) 2015.02.09
Web Server & Web Application Server  (0) 2015.02.09