Servlet 이란

Servlet의 특징

servlet은 class이고, 이식성이 뛰어나다.

Multi-Thread

  • 멀티 스레드로 동작하여 성능이 뛰어나다.

    플랫폼 독립성

  • java와 같이 플랫폼에 독립적인 기술이다.

    서버 독립성

  • servlet은 웹 서버와 무관하게 실행된다.

    확장성

  • 다양한 vendor에서 제공하는 클래스 라이브러리를 jar형태로 받아 사용할 수 있다.
    동적인 요청이 들어오면 engine이 처리, 정적인 요청은 web server가 처리한다.
    servlet을 생성하지 않다가, 동적인 요청이 들어오면 servlet을 생성한다.
    • 엔진이 servlet객쳉을 생성해서, method를 호출해준다.

Servlet의 문법

  1. 서블릿 엔진이 접근을 해야하기 때문에 Servlet은 반드시 public으로 작성해야하고, 반드시 Default 생성자만 있어야한다.

    • 멤버 변수를 default 초기화한다고해서, default 생성자이다.
  2. HTTP 프로토콜 상에서 동작하는 sevlet이라면 반드시 HttpServlet 클래스를 상속해야한다.

    • 상속 관계 : 내가 만든 Servlet -> HttpServlet -> GenericServlet -> Servlet
      • 상속을 해주어야만 Servlet타입을 가질 수 있게 된다.
      • 다른 servlet을 상속해도 되지만, web에서 사용할 수 없다.
      • Http 프로토콜에서 최적화된 HTTPServelt을 상속해주어야한다.
  3. 라이프 사이클과 관련된 HttpServlet 클래스의 callback method를 적절하게 override 해주어야한다.

    • callback method : 서블릿 엔진이 적절한 시점에 호출해주는 메서드
      • 우리가 직접 호출하지 않는다.

흐름

Servlet 객체는 메모리에 1개만 존재할 수 있다.

  1. Servlet Engine이 생성되는 순간 Thread Pool을 생성한다.
    • 서버마다 Thread 개수다 다르다.
  2. 브라우저에서 html, image 파일이 아닌 요청을 보내면 Servlet 엔진으로 전달된다.
  3. 요청하는 Servlet이 메모리에 있는지 확인한다.
    • 메모리에 있을 시 바로 4번으로 이동한다.
  4. Servlet class파일을 찾아서 로딩하고, 생성자를 호출하고, 객체가 생성된 직후에 init() 메서드를 호출한다.
    • default 생성자로 생성된 객체를 init() 메서드가 멤버 변수를 초기화 시켜준다.
  5. Thread를 할당받고, run() 메서드가 실행된다.
    • Thread Pool에 있는 Thread 중에서 랜덤으로 할당받는다.
    • run() 메서드가 service()를 호출한다.
  6. service() 메서드를 overriding하지 않으면 부모로부터 상속받는다.
    • 요청 방식이 get방식의 메서드인지, post방식의 메서드인지 분기시킨다.
  7. Servlet을 수정하고 저장 하면 Reloading을 해준다.
    • destroy() 메서드가 호출되고 수정된 Servlet으로 교체된다.
    • 혹은 server를 종료시키면, 엔진은 생성한 객체를 destory하고 종료된다.

Servlet은 최초 호출 시에만 느리고, 그 후에는 바로 Thread를 할당받으므로 빠르게 작동한다.

Author

Inwoo Jeong

Posted on

2021-10-30

Updated on

2021-11-03

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

댓글