본문 바로가기

자바

서블릿 이해하기

서블릿은 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스입니다 

서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가집니다 하지만 서블릿은 일반 자바 프로그램과

다르게 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet컨테이너에서 실행된다는 차이점이 있습니다

-저는 JSP/Servlet컨테이너를 톰캣을 사용하고있습니다 그 외 자바 기번의 JEUS와 Web Logic, 웹스피어는 IBM 등

특정 소프트웨어 회사가 개발해서 유로로 제공하는 JSP/Servlet컨테이너도 있습니다

 

서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송합니다

쿨 라이 언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 웹 애플리케이션 서버에 위임합니다 그러면 WAS는 각 요청에 해당하는 서블릿을 실행합니다 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 변환하여 클라이언트에 전송하죠 그럼 서블릿은 어떤 기능이 있는지 살펴보겠습니다.

단순히 고정된 정보를 브라우저에 보여주는 용도는 웹 서버로도 충분합니다. 그러나 쇼핑몰 화면에 실시간으로 변하는 상품의 할인 가격을 보여주려면 데이터베이스에서 가져오는 기능이나 직접 계산하는 기능이 필요합니다

따라서 이런 기능을 서버 쪽에서 서블릿이 처리해주면 상품 할인 가격 표시처럼 웹 페이지에서 동적으로 변하는 정보를 

효과적으로 다룰 수 있습니다

그 외 서블릿의 특징입니다

- 서버 쪽에서 실행되면서 기능을 수행합니다

- 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공합니다

- 스레드 방식으로 실행됩니다 

- 자바로 만들어져 자바의 특징(객체 지향)을 가집니다

- 컨테이너에서 실행됩니다

- 컨테이너 종류에 상관없이 실행됩니다(플랫폼 독립적)

- 보안 기능을 적용하기 쉽습니다

- 웹 브라우저에서 요청 시 기능을 수행합니다

*스레드 = 어떠한 프로그램 내에서 특히 프로세스 내에서 실행되는 흐름의 단위

서블릿 API 계층 구조와 기능

서블릿은 자바로 만들어졌으므로 당연히 클래스들 간의 계층 구조를 가집니다 

 

                                                   Servlet

HttpServelt > GenericServlet >

                                                  ServletConfig

 

서블릿 API는 servlet과 servletConfig 인터페이스를 구현해 제공하여 GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현합니다 그리고 이 GenericServlet을 다시 HttpServlet이 상속받습니다

*메서드: 함수 

*추상 클래스

-실제 클래스의 공통적인 부분(변수, 메서드)들을 추출해서 선언한 클래스

-추상 클래스는 객채를 생성할 수 없다 실체성 x 구체적 x

-추상 클래스와 실제 클래스는 상속관계

-공통된 필드와 메서드, 통일할 목적으로 사용

-실제 클래스 구현 시 시간이 절약됨

*인터페이스

-일종의 추상 클래스

-추상 클래스가 미 왕성된 설계도 라면 인터페이스는 밑 그림판

-인터페이스에 없는 메서드 선언 시 오류 발생

-서로 관련이 없는 경우 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 각각 구현할 경우 좋다

 

서블릿의 API 기능

서블릿 구성요소                                                 기능

Servlet 인터페이스                     - javax.sevlet 패키지에 선언돼있습니다

                                              - Servlet 관련 수상 메서드를 선언합니다

                                                 - init(), service(), destroy(), gerServletInfo(), gerServletConfig()를 선언합니다   

 

ServletConfing 인터페이스             -javax.servlet패키지에 선언돼있습니다

                                                  - Servlet 기능 관련 추상 메서드가 선언되어 있습니다

                                                     - getInitParametor(), getInitParametorNames()

                                                        -getServletContext() getServletName() 이 선언되어 있습니다

 

GenericServlet 클래스                    -javax.servlet 패키지에 선언돼있습니다

                                                 -상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스입니다

                                                    -GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라

                                                       각각 service()를 오버 라이딩해서 구현합니다

 

HttpServlet 클래스                         - javax.servlet.http 패키지에 선언되어 있습니다

                                                   -GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블                                                         릿기능을 수행합니다

                                                     -웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용합니다

                                                       -요청 시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 

                                                         차례대로 호출됩니다            

*인터페이스와 추상 클래스의 차이

인터페이스  클래스 x  클래스와 관련 x 한 개의 클래스에 여러 개 o 구현 객체의 같은 동작을 보장 목적

추상 클래스  클래스 o  클래스와 관련o한개의 클래스에 여러 개 x  상속받아서 기능을 확장시키는 목적

 

GenericServlet은 일반적인 여러 통신 프로토콜에 대한 클라이언트/서버 프로그램에서 서블릿 기능을 구현하는 클래스입니다 HttpServlet은 이 GenericServlet을 상속받습니다 HttpServlet은 이름에서 알 수 있듯이 HTTP 프로토콜을 사용하는

서블릿  기능을 구현하는 클래스입니다 바로 이 HttpServlet을 상속받아 HTTP 프로토콜로 동작하는 웹 브라우저의 요청을 처리하는 서블릿이 바로 이 책에서 만들어 사용할 서블릿입니다 그 외 다른 서블릿 구성 요소들의 기능을 밑을 참고하기 바랍니다

 

HttpServlet의 여러 가지 메서드 기능

메서드                                   기능

protected doDelete                  서블릿이 DELETE request를 수행하기 위해 service()를 통해서 호출합니다

protected doGet                      서블릿이 GET request를 수행하기 위해 service()를 통해서 호출합니다

protected doHead                    서블릿이 HEAD request를 수행하기 위해 service()를 통해서 호출합니다

protected doPost                     서블릿이 POST request를 수행하기 위해 service()를 통해서 호출합니다

protected service                      표준 HTTP request를 public service에서 전발 받아 doxxx() 메서드를 호출합니다

public sercice                          클라이언트의 request를 protected service에게 전달합니다

 

자세히 보면 클라이언트 요청 시 public service() 메서드를 먼저 호출한 후 다시 protected service()메서드를 호출합니다 그런 다음 다시 request 종류에 따라 doxxx() 메서드를 호출하는 과정으로 실행됩니다

 

서블릿의 생명주기 메서드

서블릿 > 초기화 >              실행            >            종료

                        메모리 인스텐스 생성> 실행          소멸

 

서블릿도 자바 클래스이므로 실행하면 당연히 초기화 과정 그리고 메모리에 인스턴스를 생성하여 서비스를 수행한 후 다시 소멸하는 과정을 거칩니다 이런 단계를 거칠 때마다 서블릿 클래스의 메서드가 호출되어 초기화, 데이터베이스 연동. 마무리 작업을 수행합니다 각 과정에서 호출되어 기능을 수행하는 메서드들이 서블릿 생명주기 메서드입니다

 

따라서 서블릿 생명주기 메서드란 서블릿 실행단계마다 호출되어 기능을 수행하는 콜백 메서드를 말합니다 

다음은 서블릿의 생명주기 메서드들과 그 특징을 정리했습니다

 

생명주기 단계            호출 메서드       특징

초기화                      init()               - 서블릿 요청 시 맨 처음 한 번만 호출됩니다

                                                   - 서블릿 생성 시 초기화 작업을 주로 수행합니다

 

작업 수행                   doGet()              -서블릿 요청 시 매번 호출됩니다

                              doPost()             -실제로 클라이언트가 요청하는 작업을 수행합니다

 

종료                         destroy()           -서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출됩니다

                                                      - 서블릿이 마무리 작업을 주로 수행합니다

 

init() 메서드는 실행 초기에 서블릿 기능 수행과 관련된 기능을 설정하는 용도로 많이 사용됩니다 그리고 destroy()는 서블릿이 메모리에서 소멸될때 여러 가지 종료 작업을 수행합니다 따라서 만약 이런 기능이 필요 없으면 생략해도 상관없습니다

반면에 doGet()이나 doPost()와 같이 do로 시작하는 메서드는 서블릿의 핵심 기능을 처리하므로 반드시 구현해야 합니다

 

'자바' 카테고리의 다른 글

서블릿 기초  (0) 2020.02.11
웹 애플리케이션  (0) 2020.01.28
웹 프로그래밍의 기본  (0) 2020.01.28
자료형(Data Type)  (0) 2019.08.13
변수  (0) 2019.08.12