Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Java] - Servlet Lifecycle - Fin #153

Open
Irisation23 opened this issue Apr 22, 2023 Discussed in #150 · 0 comments
Open

[Java] - Servlet Lifecycle - Fin #153

Irisation23 opened this issue Apr 22, 2023 Discussed in #150 · 0 comments
Labels
Java Java 관련 라벨입니다.

Comments

@Irisation23
Copy link
Member

Discussed in https://github.com/orgs/cs-collections/discussions/150

Originally posted by bunsung92 April 21, 2023

Servlet Lifecycle

언젠간 다뤄야 했던, 미루고 미뤘던 숙원의 서블릿의 라이프사이클을 다루게 되었다.
스프링에 앞서 해당 주제를 미리 정리 해 보도록 하겠다.

1. What is Servlet?

  • 서블릿은 요청-응답 프로그래밍 모델을 통해 액세스되는 애플리케이션을 호스트하는 서버의 기능을 확장하는데 사용되는 Java 프로그래밍 언어 클래스이다.
  • 서블릿은 모든 유형의 요청에 응답할 수 있지만 일반적으로 웹 서버에서 호스팅하는 응용 프로그램을 확장하는데 사용된다.

일반적으로 응용 프로그램의 경우 Java 서블릿 기술은 HTTP 관련 서블릿 클래스를 정의한다.


2. General Use Servlet

  • javax.servletjavax.servlet.http 패키지에서 서블릿 이용을 위한 인터페이스와 클래스를 제공한다.
  • 모든 서블릿은 라이프사이클 메서드 정의해야하며 이는 서블릿 인터페이스의 구현을 의미한다.

하지만 인터페이스는 모든 메서드를 정의 해 줘야한다. 이는 개발자 입장에서 피곤할 수 있다.
피로를 덜어주고자 이미 GenericServlet 이라는 추상 클래스에서 service()를 제외한 메서드들을 관리하고 있다.

우리가 이용할 HttpServlet은 이미 GenericServlet을 확장한 클래스이다.
즉 서블릿의 라이프 사이클 관리가 조금은 수월 해진다.
그리고 해당 클래스는 doGet()doPost() 메서드를 통해 여러 HTTP 관련 처리 서비스를 제공한다.


3. Servlet Lifecycle

  • 서블릿의 라이프사이클은 컨테이너에 의해 제어된다.
  • 서블릿에 요청이 들어오면 컨테이너는 아래의 과정을 거친다.
  1. 서블릿의 인스턴스가 존재하지 않는 경우
    a. 웹 컨테이너는 서블릿 클래스를 로드한다.
    b. 서블릿 클래스의 인스턴스를 만든다.
    c. init()을 호출하여 서블릿 인스턴스를 초기화한다.
  2. 요청 및 응답 개체를 전달하여 서비스 메서드를 호출한다.
  3. 서블릿을 제거해야 하는 경우 컨테이너 는 서블릿의 destroy() 메서드를 호출하여 서블릿을 해제한다.

라이프사이클에 커스텀이 필요하다면, 직접 핸들링을 해줄 수 있다.


4. Handling Servlet Lifecycle Events

  • 라이프사이클 이벤트가 발생할 때 메서드가 호출되는 리스너 객체를 정의하여, 서블릿의 라이프사이클에서 일어나는 이벤트들을 모니터링하고 그에 맞는 처리를 해 줄 수있다.
  • 리스너 객체의 사용을 위해서는 리스너 클래스를 정의하고 지정해주면 된다.
  • 리스너 클래스들은 아래와 같이 정의 되어있다.

image

  • @WebListener 을 이용해 특정 웹 애플리케이션 컨텍스트에서 다양한 작업에 대한 이벤트 Listener 클래스를 정의 하면 된다.

5. Handiling Servlet Errors

  • 예외가 발생하면 웹 컨테이너는 다음 메시지가 포함된 기본 페이지를 생성한다.
A Servlet Exception Has Occurred
  • 해당 예외는 다른 페이지로 돌려주는 커스텀 예외처리가 가능하다.
@Irisation23 Irisation23 added the Java Java 관련 라벨입니다. label Apr 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Java Java 관련 라벨입니다.
Projects
None yet
Development

No branches or pull requests

1 participant