Servlet

정미·2022년 7월 3일
0

Computer Science

목록 보기
17/81

Servlet

정의

클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 웹 프로그래밍 기술

  • Server Side Applet의 약어
    • applet: 플러그인의 하나, 전용 위젯 엔진이나 더 큰 프로그램 범위 내에서 실행되는 특정한 작업을 수행하는 조그마한 응용 프로그램
  • 웹 컨테이너에서 수행되는 JAVA 클래스
  • 자바로 구현된 CGI(Common Gateway Interface)

특징

  • web application component
  • 클라이언트의 요청에 동적으로 작동한다.
    • 웹서버는 정적인 페이지만 제공한다. 웹서버가 동적인 페이지를 제공할 수 있도록 도와준다.
  • Java Thread를 이용하여 동작한다.
  • MVC 패턴의 Controller
  • extends javax.servlet.http.HttpServlet
  • UDP보다 느린 처리속도
  • 자바 소스코드 속에 HTML 코드가 들어가는 형태
  • html로 응답한다.
    • html 변경시 servlet을 재컴파일해야한다.

생명 주기

서블릿의 생성과 소멸은 서블릿 컨테이너가 관리(호출)한다.

  1. init()
    • 메모리에 해당 서블릿이 없다면 Servlet Container가 요청을 처리할 Servlet instance 생성, 메모리에 적재
    • 자동 호출되어 서블릿이 초기화해줄 작업을 수행한다
  2. service()
    • 클라이언트의 요청 처리
    • 요청에 따라 doGet(), doPost()로 분기된다.
    • 요청인 ServletRequest 객체와 응답으로 내어줄 결과 페이지 ServletResponse 객체를 매개변수로 사용한다.
    • 서비스 후
      1. 컨테이너에 의해 thread pool에 들어간다. 나중에 다시 실행될 수 있다.
      2. 메모리에서 내려가서 garbage collection이 된다.
  3. destroy()
    • gc가 되기 전 마지막 처리 작업

객체는 1개, 스레드는 각 요청마다 생성된다.

Servlet Container

정의

서블릿을 관리해주는 컨테이너

특징

  • 서블릿은 스스로 작동할 수 없고, 서블릿을 관리, 작동해주는 것이 필요하다.
  • 서블릿 = 역할 정의서, 컨테이너 = 정의서를 보고 수행
  • 웹서버와 소켓 통신
    • 요청을 받고 응답을 주는 역할
  • ex> Tomcat

역할

  1. 웹서버와의 통신 지원
    • 일반적으로 소켓 통신을 할 경우 listen, accept이 필요하다.
    • 위와 같은 복잡한 과정을 생략하고 서블릿에 구현해야할 비즈니스 로직에 집중할 수 있게 된다.
  2. 서블릿 생명주기 관리
    • 서블릿 클래스를 인스턴스화, 초기화 메서드 호출, 요청에 따른 적절한 서블릿 메서드 호출, garbage collection 진행
  3. 멀티쓰레드 지원 및 관리
    • 컨테이너는 요청마다 새로운 자바 스레드 생성
    • 다중 스레드 생성 및 운영 - 안정성
  4. 선언적인 보안 관리
    • 보안 관련 내용을 자바 소스나 서블릿에 구현하지 않는다.
    • xml에 기록

동작 과정

  1. 클라이언트가 URL을 입력하면 Servlet Container로 HTTP REQUEST가 전송된다.
  2. 요청을 받은 컨테이너는 HttpServletRequest, HttpServletResponse를 생성한다.
  3. web.xml을 기반으로 요청 URL이 어느 서블릿에 해당하는지 찾는다.
  4. 해당 서블릿에서 service() 호출한다.
  5. 요청이 GET인지 POST인지에 따라 doGet() 혹은 doPost() 호출한다.
  6. 동적 페이지를 생성한 후 HttpServletReponse 객체에 응답을 보낸다.
  7. 응답 후 HttpServletRequest, HttpServletResponse를 소멸시킨다.

출처

0개의 댓글