1. 정의

javax.servlet / javax.servlet.http 패키지


네트워크 프로토콜과 무관하게 설계되었지만, 대부분 HTTP 프로토콜을 사용하는 웹 환경에서 동적인 컨텐츠를 만들 때 사용하는 기술

jsp는 서블릿 기술을 기반으로 탄생했고 복잡한 html 디자인으로 구성된 동적인 페이지를 만드는데 서블릿보다 좋은 생산성을 가짐


* javax.servlet.Serlvet 인터페이스 : 모든 서블릿이 구현해야 함

  javax.servlet.GenericServlet 추상클래스 : 대부분의 서블릿이 상속 받아야 함

  javax.servlet.http.HttpServlet 클래스 : http 프로토콜을 사용하는 서블릿이 상속 받아야 함


* GenericServlet은 개발자가 사용하기 편하도록 javax.servlet.ServletConfig 인터페이스로 구현하였음

 

 

2. 구성

ㄱ. Servlet 인터페이스

모든 서블릿은 Servlet 인터페이스를 구현해야 함

서블릿의 라이프사이클 메소드가 선언되어 있음

- init() : ServletConfig 인터페이스 객체를 인자로 전달 받는데, DD에 초기화 파라미터가 존재할 경

우 init(ServletConfig config) ~ 가 됨

- service()

- destroy()

ㄴ. GenericServlet 추상클래스

부모 클래스로 쓰이고 ServletConfig 인터페이스를 구현함

Servlet 인터페이스를 불완전하게 구현하기 때문에 service() 메소드는 Abstract로 선언해야 하고 GenericServlet은

추상 클래스가 됨

(ex. public abstract void service(       ,     ) ~ )

인자가 없는 init() 메소드는 편의상 추가되었음

=> init(ServletConfig config)의 경우 자식 클래스에서 오버라이딩응ㄹ 하려면 첫번째 줄에 super(config); 코드

넣어야 함

ㄷ. HttpServlet 클래스

요청 : HttpServletRequest / 응답 : HttpServletResponse



3. 동작 과정

ㄱ. 사용자의 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 메소드에서 응답 생성

'BackEnd > Java' 카테고리의 다른 글

Java :: JDBC DAO 소스  (0) 2016.04.26
Java :: 패키지 이름 명명 규칙  (0) 2016.04.02
Java :: 다형성  (1) 2016.03.23
Java :: this  (0) 2016.03.21
Java :: 상속(Inheritance)  (0) 2016.03.20

+ Recent posts