[Servlet] 특징 - container, lifecycle, context, scope

아현·2022년 1월 16일
0

📚정리/백엔드 

목록 보기
1/3
post-thumbnail

Servlet

클라이언트의 요청을 처리하고 웹 페이지를 동적으로 생성하는 자바 웹 프로그래밍 기술

• HttpServlet 클래스를 상속받아 생성
• Java Thread를 이용하여 동작
• HTML 변경 시 Servlet 재컴파일 필요


서블릿 컨테이너(Servlet Container)

웹 서버와 통신하기 위한 소켓 생성, 포트 리스닝, 스트림 생성 등의 업무를 담당

  • 서블릿의 생명주기를 관리 → 요청 시 마다 새로운 스레드 생성
  • 대표적인 서블릿 컨테이너: 톰캣(Tomcat)

서블릿 생명주기(Servlet Lifecycle)

생성자 → init() → service() → doGet(), doPost() → destroy()

• init() : 최초 요청시에 초기화 후에는 해당 과정을 생략 (싱글톤 패턴)
• service() : 클라이언트의 요청시 호출되며, 각 요청은 별도의 쓰레드로 처리
요청 메서드를 판별 후 doGet(), doPost()를 호출 → 해당 메서드를 선언하지 않은 경우 405 에러 발생
• destroy() : 서블릿이 메모리에서 해제될 때 호출, 서버 종료시 호출


서블릿 동작방식

Client Servlet Container
1. 요청 URL
서버에 요청할 정보를
URL 형태로 생성하여 호출
2. 객체 생성
HttpServletRequest, HttpServletResponse
3. web.xml
요청 URL 분석 후 해당 서블릿(Servlet)에 요청 전달
4. 서블릿(Servlet)
service() 호출
5. service()
요청 메서드에 따라 doGet() 또는 doPost()를 호출
6. doGet(), doPost()
동적 페이지 생성 후 HttpServletResponse로 결과 전달
7. 객체 소멸
결과를 클라이언트로 전송 후 HttpServletRequest, HttpServletResponse 객체 소멸

서블릿 컨텍스트(Servlet Context)

하나의 웹 애플리케이션(Web Application)에서 모든 서블릿들을 관리하고 서블릿 간의 정보를 공유할 수 있게 도와주는 클래스

  • 컨테이너의 실행 시 생성되며, 하나의 웹 애플리메이션에는 하나의 컨텍스트가 존재
  • 필터, 리스너를 등록하여 통신 간에 활용할 수 있음
    • 리스너는 서블릿 리스너, 세션 리스너 등의 EventListener 구현체
    • 필터는 characterEncoding 등의 Filter 구현체

객체의 영역(Scope)

객체를 사용하고 활동할 수 있는 범위

Page
한 번의 클라이언트 요청에 대해 하나의 JSP 페이지(Page)를 범위로 가짐
⇨ pageContext 객체를 이용하여 페이지 내의 입/출력, 별도 내장객체는 존재하지 않음
⇨ 페이지 이동(forwarding)이 일어나는 경우 소멸

Request
GET, POST 등 요청(Request)을 처리하는데 사용하는 모든 JSP 페이지를 포함하는 범위
⇨ 웹 브라우저가 요청을 보낼 때 마다 새로운 Request 영역이 생성

Session
같은 세션(Session)을 공유하는 하나의 웹 브라우저에서 이루어지는 모든 요청 범위
⇨ 세션의 구분을 위해 고유 ID를 할당, 유효시간 설정 가능

Application
웹 애플리케이션(Application)의 전체 영역을 포함하는 범위
⇨ 웹 컨테이너(Web Container)의 재시동 시 기존 영역 삭제 후 재생성


출처 및 참고🔗
https://velog.io/@gillog/Servlet서블릿
https://jordy-torvalds.tistory.com/14

profile
💻🤦🏻‍♀️

0개의 댓글