jb.log

..loading

servlet 복습, 생명주기

October 2, 2019

서블릿 프로그램을 공부하면서 배운 내용들을 정리하려고 한다.

서블릿(Servlet) 의 등장 배경

  1. 자바 프로그램은 OS 또는 콘솔을 통해 사용자와 상호작용을 함
  2. 웹의 엄청난 발전으로 인해 점차 자바 프로그램은 -> 자바 웹 프로그램으로 바뀌기 시작
  3. 사용자는 브라우저를 통해 조작을 하여 원하는 기능들을 사용
  4. 사용자가 조작한 것, 예를 들어 www.example.com 이라는 도메인 주소를 요청하면 브라우저(클라이언트)는 도메인주소에 해당하는 ip주소의 서버에게 요청을 보냄
  5. 웹 서버는 요청에 대한 html 문서를 응답해줌
  6. 하지만 html문서는 정적인 문서이기때문에 서버에 존재하는 html문서만으로는 데이터의 변화를 줄 수 없음
  7. 그래서 웹 서버는 동적인 데이터가 필요하다면 웹 어플리케이션 서버(줄여서 WAS)에게 요청을 위임하여 웹 어플리케이션을 실행시켜 필요한 기능을 수행하게하고 그 결과를 웹 서버가 다시 받아 응답해주는 방법을 사용한다.
  8. WAS에서 사용된 웹 어플리케이션이 바로 서블릿(Servlet) 이다.

서블릿(Servlet)

서블릿은 다음과 같이 말할 수 있다.

  • 자바 웹 서버 프로그램

좀 더 풀어서 말하면 다음과 같이 말할 수 있다.

  • 서버쪽에서 실행되고 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스

서블릿 컨테이너(Servlet Container)

사실 위의 일련의 과정중 생량된 것이 바로 서블릿의 컨테이너이다. WAS를 위에서 언급하였는데 브라우저에서 요청이오면 웹서버는 WAS의 내부에 서블릿 컨테이너에게 요청을 위임하는 것이다.

서블릿 컨테이너는 서블릿들의 생성, 실행, 파괴를 담당한다.

서블릿 생명 주기(Servlet Life Cycle)

  • init() : servlet이 생성되는 단계 (최초 한번만 실행)
  • service() : servlet이 실행되는 단계
    • 상황에 따라 doGet(), doPost() 메소드를 호출
  • destroy() : servlet이 소멸되는 단계

image

위의 서블릿 컨테이너에 의한 서블릿의 생명주기 상세보기이다.

  1. HTTP 요청을 서블릿 컨테이너가 받음
  2. 서블릿 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성
  3. 배포 서술자(Web.xml)을 참고하여 요청한 URL이 어느 서블릿에 대한 요청인지 찾음
  4. 해당 서블릿 클래스가 컨테이너에서 실행된 적이 없거나 현재 메모리에 생성된 인스턴스가 없다면 새로 인스턴스를 생성하고 init() 메소드를 실행하여 최기화하고 스레드를 하나 생성
  5. 이미 인스턴스가 존재한다면 새로 생성하지 않고 기존의 인스턴스에 스레드만 하나 생성
  6. 컨테이너는 service() 메소드를 호출하여 POST, GET 여부에 따라 doGet() 또는 doPost() 메서드가 호출됨
  7. doGet(), doPost()등의 메서드는 동적인 페이지를 생성 후 HttpServletResponse을 호출
  8. 응답을 주고 HttpServletRequest, HttpServletResponse 객체 소멸

Other Posts

October 1, 2019
jsp 프로젝트 만들기 - mvc1, mvc2
이전에 만든 `board-detail.jsp`은 DB와 잘 연결되어 화면에 데이터를 잘 출력하는 것을 볼 수 있다. 하지만 jsp 파일 내의 코드를 보면 자바코드와 html코드가 뒤엉켜 있는 것을 볼 수 있다. 이것을 스파게티 코드라 한다.
September 29, 2019
jsp 프로젝트 만들기 - 시작
본격적으로 jsp를 이용한 servlet 프로젝트를 만들어보겠다. jsp와 servlet의 활용 목적이 주된 내용이기 html/css 는 가급적 손대지 않고 비즈니스 로직에 집중하도록 하겠다.
September 25, 2019
jsp 프로그래밍
jsp란 `Java Server Pages` 의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
September 24, 2019
Servlet 상태관리
서블릿은 요청이 오면 응답을 주고 메모리에서 사라지기 때문에 서블릿들 간의 연결이 불가능하다. 만약 기존의 데이터를 저장할 일이 생겼다고 하면 서블릿 스스로 저장할 수 있는 것은 아니다. 이것은 ServletContext로 해결할 수 있다.
September 22, 2019
한글 인코딩
servlet 클래스에서 한글을 출력하면 한글이 깨지는 것을 볼 수 있다. 해당 문제점은 다음과 같이 해결할 수 있다.
September 20, 2019
Servlet 다루기
기존의 html 문서만으로는 동적인 내용을 전달할 수 없다. 때문에 WAS(web application server) 에서 동작하는 프로그래밍 언어를 사용하면 가능하다.