본문 바로가기

JAVA

JAVA - Web : Servlet 동작 과정 정리 1

Servlet 동작 과정

출처 https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80

  1. 클라이언트가 URL을 입력
  2. HTTP request가 요청 전송
  3. Servlet Container(대표적으로 톰캣)*가 요청 받아
  4. HttpServletRequest, HttpServletResponse 객체 생성
5. web.xml 기반으로 사용자가 요청한 URL이 어느 서블릿 요청인지 탐색(mapping 필요)
 - web.xml은 서버가 시작되면 제일 먼저 읽는 파일
 - 웹 어플리케이션의 배포서술자(Deployment Descriptor)* 역할
 - 1번 클라이언트가 입력한 URL과 web.xml에 등록된 URL이 일치 하는 경우 해당 파일 실행
  → URL 예시 : http://localhost:8001/servlet
  → 즉, http://구동종인서버의ip:포트번호/애플리케이션ConstextPath**
 - 해당 파일은 webapp/에 위치해 있어야 찾을 수 있음

* 배포서술자란?
 - 해당 웹 애플리케이션의 기본적인 설정들을 작성
 - Java EE(Java Enterprise Edition) 기반의 웹 애플리케이션에서 사용되는 XML 파일
 - Tomcat과 같은 서블릿 컨테이너에 웹 애플리케이션을 배포하는 방법 설명하는 파일
 - 파일의 위치는 항상 동일: src/main/webapp/ WEB-INF/web.xml에 위치

** Context Path란?
 - URL의 일부.
 - 웹에서 상대적인 경로, 웹 컨테이너가 JSP 실행 시 자동으로 생성해 제공하는 내장 객체
 - 웹 어플리케이션 서버(Web Application Server) = 톰캣에서 웹 상의 어플리케이션을 식별하기 위한 경로
 - http://구동종인서버의ip:포트번호/애플리케이션ContextPath → 밑줄 그은 부분
  = [프로토콜]://[도메인]:[포트]/ 형태에서 [도메인]:[포트] 뒤에 나오는 식별자
 - 클라이언트가 특정 URL을 요청하면 Context Path를 기준으로 라우팅
5~6번 사이: init()
- 클라이트의 요청이 들어오면 서블릿 컨테이너에서 해당 서블릿이 메모리에 있는지 확인

 - 있을 경우: 해당 서블릿 요청
 - 없을 경우: 서블릿 클래스의 인스턴스를 메모리에 적재 필요
  → 서블릿 클래스 로드하고 인스턴스를 생성한 후 메모리에 적재
  → 이 과정에서 init() 메서드 호출되며 초기화 작업 수행
  → init() 메서드는 HttpServlet 클래스를 상속받은 서블릿 클래스에 위치
  → 즉, 해당 서블릿에 각각 스레드에서 공통적으로 사용하기 위해 필요한 작업이 있으면 init() 메서드 오버라이딩해 구현 가능
 - init() 메서드 최초 한번 수행 이후 요청은 스레드로 실행

6. 해당 서블릿에서 service() 메소드 호출

 - service() 메서드를 통해 doGet()과 doPost()로 분기
 - 이 때 파라미터로 HttpSevletRequest와 HttpServletResponse 클래스 타입인 request, response 객체 제공
 - 사용자 요청 처리는 request로 응답 처리는 response로

 

7. GET, POST 요청 중 어느 것인지에 따라 doGet(), doPost() 메소드 호출

8. doGet(), doPost() 메소드에서 요청 시 들어오는 값을 추출

9. 추출한 값을 가공 처리(servlet(controller) ↔ service() ↔ dao() ↔ DB)

10. 가공 후 사용자가 보게될 동적 응답페이지(jsp) 선택해 포워딩

11. 응답이 끝나면 HttpServletRequest, HttpServletResponse 객체 소멸