2.9 서블릿(Servlet) 개요

API
서블릿 상세이야기들

서블릿(Servlet) 개요와 작동 원리


1. 서블릿 개요


■ 서블릿이란?

◎ "Server side applet"의 약자로서 자바의 애플릿이 웹 클라이언트(브라우저 등)에서 돌아가는 작은 프로그램이라면 서블릿은 서버에서 돌아가는 프로그램을 의미하며

서블릿은 CGI 프로그래밍에 대한 자바측 기술로 등장하게 되며
JSP는 마이크로소프트 진영의 ASP가 인기를 끌자 ASP에 대응하기 위한 자바측 기술로 나타난다.

서블릿 아키텍처는
javax.servlet와javax.servlet.http두개의 팩키지로 구성되고
javax.servlet팩키지는
모든 서블릿이 상속하거나 구현하는 일반적인 인터페이스와 클래스로 구성되어 있다.
javax.servlet.http팩키지는 HTTP 프로토콜에 맞춘 서블릿 클래스로 구성된다.
javax.servlet.Servlet인터페이스는 서블릿 아키텍처의 핵심으로 모든 서블릿의 기초 클래스인Servlet인터페이스는
5개의 메소드를 정의한다.

그 중 가장 중요한 3개의 메소드는 다음과 같다.
init() : 서블릿을 초기화
service() : 클라이언트 요청에 대한 서비스
destory() : 자원반납
이들 메소드는 서블릿 라이프사이클 메소드를 구성합니다.
상속을 통해서든 아니면 직접적인 구현을 통해서 모든 서블릿은 반드시Servlet인터페이스를 구현해야 합니다.











java.lang.Object
--- javax.servlet.GenericServlet
---- javax.servlet.http.HttpServlet
---- org.apache.jasper.runtime.HttpJspBase
All Implemented Interfaces
javax.servlet.jsp.HttpJspPage, javax.servlet.jsp.JspPage, java.io.Serializable, javax.servlet.Servlet,
javax.servlet.ServletConfig
을 사용하여
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException
를 호출로 jsp 서블릿이 시작된다.

측 청사진인 GenericServlet 은 java.io.Serializable 에서 확장된 것이다.

*JSP 라이프 사이클
만약 서블릿이 생성되어 있지 않거나 JSP 파일이 :수정된 경우에는 아래의 단계에 따라 요청
을처리할것이다.
1. JSP 파일을 서블릿 코드로 번역하여 컴파일한다.
2. 컴파일된 서블릿에 대한 인스턴스를 생성하여 메모리에 적재한다.
3 적재된 인스턴스를 초기화하기 위해서 jspInit( ) 메소드를 호출한다.
4. _jspService() 메소드를호출하여 요청에 대한처리를한다.
5. 그리고 JSP 페이지에 대한 서블릿을 메모리에서 삭제할 필요가 있을때에는 jspDestroy( ) 메
소드를 JSP 컨테이너가 호출하게 된다. 이렇게 시작과 끝에 jspInit( )와 jspDestroy( ) 메소드
한번씩 호출되고, 이후의 모든 요청은 jspService () 메소드가 처리한다.

jsp에서 뒷단인 java 쪽과의 통신은 HTTP 의
HttpServletRequest request (요청),
HttpServletResponse response(응답) 는 기본적으로 클라이언트 요청/서버 응답 메커니즘을 사용한다.

클라이언트에서는 요청할 자원 및 클라이언트에 대한 기본적인 정보(
클라이언트의 HTTP 프로토콜 버전,
브라우저정보,
처리 기능한 MIME 형식 등)나 쿠키와같은내용은 HTIP 헤더에 포함시키고, 서버가참
조할 데이터는 HTTP 헤더(GET 방식)나 HTTP 본문(POST 방식)에 포함시켜 HTTP 요청으
로 보낸다. 서벼에서는 요청한 내용의 처리에 대한 성공 여부(상태 코드)나 서버에 대한 기본
적인 정보(서버 HTTP 프로토콜 벼전, 웹 서버 버전, ContentType) 그리고 쿠커 설정과 같은 내
용을 HTTP 헤더에 포함시키고요청에 대한응답내용자체는 HTIP 본문에 포함시켜 HTTP
응답으로전송한다.

요청에 대한 결과로 클라이언트가 받는 응답은 웹 서버가 전송한 HTIP 헤더와 HTTP 본문
으로 구성되어 있다고 했다. 여기서 클라이언트 브라우저는 서벼로부터 제일 먼저 HTTP 본
문보다 응답 헤더를 먼저 받F아보기를 기대한다. 이것은 브라우저는 서버로부터 전송된 응답
헤더를 먼저 확인하여 이것에 근거하여 응답 HTTP 본문 내용을 브라우저로 출력하려 하기
때문이다.
이러한 이유로 서버에서는 응답 내용 자체(브라우저로 출력될 내용) 즉 HTTP 응답 본문보다
응답 헤더 (Hπp 헤데를 클라이언트 브라우저가 먼저 받F아보도록 해 주어야 한다 HTTP 서
블릿에서 요청을 처리하는 doGet( ), doPost( ), service( )와 같은 메소드 내에서
HttpServletResponse 객체를 통해 클라이언트로 응답 내용을 보내기 전에 먼저 컨텐트 타입
(예: response.setContentType( "text/html;charset=euc-kr");)을 지정하라는 것도 바로 이 때
문이다.


[참고] 애플릿(Applet)이란?

- 자바로 구현된 브라우저 상(Client side)에서 실행되는 작은 프로그램( Application의 app와 ‘작은’의미를 나타내는 let의 조합 )

- 정적인 웹문서에 동적인 컨텐츠를 제공하기 위해 만들어진다. (계산기, 메모장, 채팅 아니면 그래프 등의 UI 등을 제공하는 간단한 프로그램 등등)

- html 문서에서 "applet" 태그를 이용해 Applet 클래스를 상속받은 클래스'xxx'를 호출받아 웹브라우저 상에 동작시킬수있다.
// 애플릿 html 태그
//  <applet code ="xxx.class"></applet>
// 
// 애플릿 클래스 선언 방식
// public class [클래스이름] extends Applet {  }

□ init, start, resize, paint, destroy 등의 메소드를 오버라이드한 메소드에서 코드를 작성하여 기능을 구현한다.


◎ 웹에서 사용 가능한 자바 프로그램을 구현하기 위한 방법으로써, 자바 기반의 확장 CGI 애플리케이션을 구현하기 위해 사용된다.

◎ 내부적으로 요청과 응답 기반의 서비스에 내장되어 실행되는 일종의 모듈이다. HTTP 프로토콜을 사용하고 있는 웹 서버뿐만 아니라 요청과 응답을 사용하는 모든 서버에서 수행될 수 있다.

◎ 서블릿이 동작하는 원리는
  • javax.servlet.HttpServlet 클래스를 상속받아서 작성된다. HttpServlet 클래스는 init(), service(), destory()의 세 개의 메소드에 의한 생명주기(Life Cycle)를 갖는다.
  • HTML의 폼 태그를 통해서 파라미터를 전달하며 HTML에서 데이터를 서버측으로 전달하는 방법을 기술하는 메소드를 그대로 사용한다.
  • 서블릿은 자바 가상 머신(JVM)이라는 단일 프로세스 환경에서 클라이언트의 요청에 따라 다중 스레드로 동작 시킨다. 여기서 생성된 스레드는 객체가 차지하고 있는 메모리 영역을 공유하게 된다.

■ 서블릿 컨테이너

◎ 서블릿 컨테이너(Servlet Container)란 서블릿을 실행하기 위한 제반 환경과 저장 공간 등을 그릇과 같은 역할로써, 서블릿 객체를 생성하고 관리하고 클라이언트에게 서비스해 주는 프로그램을 말한다.

◎ 서블릿 컨테이너는 자체적으로 웹 서버 기능을 가지고 있기 때문에 웹 서버로 역할을 할 수 있다.

◎ 서블릿 컨테이너에는 Tomcat, Resin, Jetty, JBoss(무료용) 등의 오픈소스 기반의 것과 WebLogic, WebSphere, Zeus, JBoss(상용) 등등의 상용 서블릿 컨테이너 등이 있다.



[참고]
- Servlet을 포함한 JSP 2.1 웹 프로그래밍 입문에서 완성까지(Second Edition) - 한연희, 손진곤 저 (이한 출판사)