[Servlet] 서블릿 기본

Inyoung·2021년 9월 16일
0

서블릿(Servlet)이란?

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

  • 톰캣과 같은 Servlet 컨테이너에서 실행됨
  • 일반적으로 HTTP (HyperText Transfer Protocol)를 통해 웹 클라이언트의 요청을 수신하고 응답

Servlet 관련 객체

  • javax.servlet.Servlet
  • javax.servlet.GenericServlet
  • javax.servlet.http.HttpServlet

Servlet 동작과정



Servlet 컨테이너(WAS)

Servlet 을 실행하기 위한 실행 환경
- 아파치 톰캣이 대표적임

웹서버와 Servlet 컨테이너(WAS) 비교



Servlet 특징

  • 일반적인 자바 클래스 구조
  • 컴파일 과정 필요
  • 보안 기능 적용 용이
  • Servlet 컨테이너에 의해 실행
  • 서버쪽에서 실행되면서 기능 수행
  • 웹 브라우저에서 요청시 기능 수행
  • 특정 클래스(Servlet)를 상속 받아야만 구현할 수 있는 구조
  • 일반적으로 Servlet 은 javax.servlet.http.HttpServlet 클래스를 상속하여 구현

Servlet 인터페이스(최상위 클래스)

Servlet 인터페이스의 메소드

  • init() : 서블릿 초기화
  • service() : 클라이언트의 모든 호출 처리
  • destory() : 서블릿 서비스가 중단된 후 Garbage 수집 등을 완료
  • getServletConfig() : 서블릿의 시작 정보를 가져오는데 사용
  • getServletInfo() : 서블릿의 작성자, 버전 및 서버와 같은 자체에 대한 기본 정보 제공

인터페이스(interface)

  • 호출자와 호출당하는 것 사이의 호출 규칙 정의에 사용되는 문법
  • Implements 키워드로 구현
  • 인터페이스를 구현하는 클래스는 반드시 인터페이스에 선언된 모든 메서드를 구현해야 함

Servlet API


GenericServlet

Servlet 인터페이스를 구현한 추상 클래스

  • GenericServlet은 service()를 제외한 나머지 4개의 메소드를 미리 구현해 두어 서브 클래스가 service()만을 구현할 수 있도록 함
  • 프로토콜에 무관한 기본 서비스만을 제공하는 클래스이므로 HttpServlet과 같은 프로토콜 특정 서브 클래스를 확장하는 것이 더 일반적

HttpServlet

- GenericServlet 클래스보다는 HttpServlet이 HTTP 프로토콜 지원이 포함되어 일반적 웹 프로그램에 적합
- HttpServlet의 서브클래스는 적어도 다음 중 하나의 메소드를 작성해야 함

  • doGet() : get 요청 시
  • doPost() : post 요청 시
  • service() : 클라이언트의 요청 시
    ...


Servlet 동작구조



Servlet 생명주기(Life Cycle)

- 서블릿도 자바 클래스이므로 실행하면 당연히 초기화 과정 메모리에 인스턴스를 생성하여 서비스를 수행 다시 소멸하는 과정을 거침

- Servlet 생명주기 메서드

Servlet 실행 단계마다 호출되어 기능을 수행하는 메서드


- Servlet 초기화 : init() 메서드

  • Servlet 실행 시 호출되는 메서드
  • 초기에 한 번만 실행(Java의 main()와 같음)

- 요청/응답 : service()/doGet()/doPost() 메서드

  • 사용자 요청에 따라 스레드로 실행되는 메서드
  • service() 를 통해 doGet() 혹은 doPost() 메서드호출
  • 매개변수 HttpServletRequest 와 HttpServletResponse 를 통해 사용자 요청을 처리

- Servlet 종료 : destroy() 메서드

  • 컨테이너로부터 Servlet 종료 요청이 있을 때 호출
  • init()와 마찬가지로 한 번만 실행
  • Servlet 종료 시 정리 작업을 destroy() 를 재정의해 구현
profile
print("공부기록 블로그")

0개의 댓글