본문 바로가기

IT/Web server

WAS(Web Application Server)와 서블릿(Servlet)

Servlet은 웹 요청에 대한 동적인 처리를 수행하는 클래스이다. 
  • 서버 상에서 실행되는 자바 프로그램
  • 개발자가 작성해야하는 부분이다. 
  • HttpServlet 클래스를 상속하고 doPost(), doGet() 등을 재정의하여 요청에 대한 응답을 처리한다. 

 

WAS 동작 과정

 

Servlet의 기본 동작 과정 

  • Web Server는 Http Request를 Web Container에게 위임한다.
  • 클라이언트 URL 요청이 들어오면,  Web Container가 URL 매핑을 통해 Servlet을 실행한다.
  • Servlet이 처음 실행된 것이라면 init() 메소드를 통해 Servlet을 초기화하고 메모리에 로드한다. 
  • Servlet이 메모리에 적재되어있다면 Thread를 생성하고 service() 메소드를 실행해 요청에 대한 처리와 응답을 수행한다.
  • service() 메소드 실행 시, 요청 Method 타입에 따라 doGet(), doPost() 메소드가 호출된다.
  • 요청이 끝나면 Thread는 종료되고 제거된다. 하지만 해당 Servlet 객체는 메모리에 계속 유지된다.

 

 

Servlet LifeCycle

Web Container는 Thread의 생성과 제거를 담당한다.

thead의 생성과 제거의 반복은 큰 오버헤드를 만든다.

이를 위해 Tomcat(WAS)은 Thread Pool을 만들어 오버헤드를 줄인다.

즉, Web Container는 Servlet의 LifeCycle을 당담한다.

클라이언트의 요청이 들어왔을 때, Servlet객체 생성은 Web Container가 알아서 처리한다.

개발자는 서비스 로직을 수행하는 Servlet만 개발하면 된다.

 

init(), service(), destroy() 메소드

  • init() 메소드
    • 한 번만 수행된다
    • 클라이언트가 요청하면 servlet이 생성되고, 메모리에 로드 될 때, init() 메소드가 호출된다.
    • Servlet 객체를 초기화 역할을 수행한다.
  • service(request, response) 메소드
    • request type에 따라서 doGet(), doPost(), doPut(), doDelete() 메소드가 실행된다.
    •  메서드가 return되면 해당 thread는 제거된다.
  • destroy() 메소드
    • 한 번만 수행된다.
    • WAS가 갱신되거나 종료될 때 호출된다.
    • Servlet 객체를 메모리에서 제거하는 역할을 수행한다.

 

HttpServletRequest, HttpServletResponse 객체

  • HttpServlet을 상속한 클래스의 doGet(), doPost() 메소드 등의 파라메터로 넘어온다.

 

  • HttpServletRequest
    • 클라이언트의 요청 정보(헤더 정보, 파라메터, 쿠키, URI, URL 등)를 저장한다.
    • getHeader("헤더이름") 메소드를 통해서 헤더정보를 확인 할 수 있다.
    • getPrameter("파라메터이름") 메소드를 통해 parameter 값을 확인 할 수 있다.
    • getParameterValues("파라메터이름") 메소드를 통해 배열로 저장된 값을 읽을 수 있다.
  • HttpServletResponse
    • HTML 코드 및 데이터를 담아서 반환할 수 있다. 

 

참조 - https://gmlwjd9405.github.io/2018/10/28/servlet.html