[F-Lab 모각코 챌린지] 12일차 - JSP 와 서블릿, 서블릿 컨테이너

F-Lab 모각코 챌린지 12일차 jsp, servlet, servlet container 에 대해 학습 하고 정리 한 내용입니다.

[F-Lab 모각코 챌린지] 12일차 - JSP 와 서블릿, 서블릿 컨테이너

JSP 란?

동적 웹 애플리케이션을 개발하기 위한 Java 기반의 서버 사이드 스크립팅 기술

JSP 는 Java Server Pages 의 약자로, HTML 코드에 Java 코드를 넣어 동적 웹 페이지를 생성하는 서버 사이드 스크립팅 기술

JSP 로 작성된 프로그램은 클라이언트의 요청을 받아서 처리 할 때 Servlet 으로 변환되어 JSP 태그를 분석하고 추출하여 순수한 HTML 을 반환

Servlet

Java 를 기반으로 하는 서버 사이드 웹 애플리케이션 개발을 위한 기술

Java Servlet 의 주요 특징

  • Servlet 컨테이너
  • HttpServlet 클래스
  • 요청과 응답 처리
  • Servlet 라이프 사이클
Servlet 컨테이너

Servlet 은 Servlet 컨테이너에서 실행 됨

대표적인 Servlet 컨테이너 : Apache Tomcat, Jetty, JBoss

서블릿 컨테이너의 주요 기능과 역할

  • 라이프 사이클 관리
    서블릿 인스턴스의 생성 -> 초기화 -> 요청 처리 -> 종료 의 라이프사이클을 가지며 후술할 메서드를 통해 원하는 작업을 수행 할 수 있음
  • 요청 처리 (후술)
  • 스레드 관리
    서블릿 컨테이너는 클라이언트의 요청에 대해 별도의 스레드를 할당하여 처리
    각 요청은 스레드풀 또는 스레드 관리 메커니즘을 사용하여 효율적으로 관리
  • 보안 관리
    클라이언트의 인증, 권한 부여, 보안 정책 적용 등을 수행
    웹 어플리케이션의 보안 요구사항에 따라 인증 및 권한 검사를 수행
  • 웹 애플리케이션 관리
    여러 웹 애플리케이션은 고유한 컨텍스트를 가지며 서블릿 컨테이너는 각 애플리케이션의 설정 및 자원을 관리
  • 기타 기능
    요청과 응답의 필터링, 세션 관리, 캐싱, 로깅 등의 기능을 제공
HttpServlet 클래스

Servlet 인터페이스를 구현한 추상 클래스로 HTTP 프로토콜 기반의 웹 애플리케이션 개발을 위해 사용

HttpServlet 을 상속하여 사용자 정의 서블릿 작성 가능

요청과 응답 처리

클라이언트의 HTTP 요청은 HttpServletRequest 객체를 통해 서블릿으로 전달, 이 요청을 Servlet 이 받아서 처리하고 HttpServletResponse 객체를 사용하여 클라이언트에게 응답을 전송

이 과정을 통해 서버는 동적인 콘텐츠 생성이 가능

Servlet 라이프 사이클

Servlet 은 라이프 사이클 메서드를 가지며 이를 재정의 하여 필요한 작업을 수행 가능

  • init()
    - Servlet 인스턴스가 생성 된 후 Servlet 컨테이너에 의해 호출됨
    - Servlet의 초기화 작업을 수행하기 위해 사용.
    - Servlet의 생명 주기 동안 단 한 번만 호출됨
    [데이터베이스 연결 설정, 초기 설정 값 로딩 등 수행]
  • service()
    - 클라이언트의 요청이 들어올 때 마다 서블릿 컨테이너에 의해 호출됨
    - 요청을 처리하고 응답을 생성하는 주요한 메서드
    - HttpServletRequest 와 HttpServletResponse 객체를 사용하여 실제 작업을 수행
    - 여러 번 호출될 수 있으며 각 요청에 대해 별도의 스레드가 생성될 수 있음
  • destroy()
    - Servlet 컨테이너가 Servlet을 종료하기 전에 호출
    - 이 메서드가 호출된 후에는 Servlet 인스턴스는 메모리에서 해제됨

Java 의 서블릿 클래스

javax.servlet.Servlet 인터페이스에 정의된 일부 메서드들을 정리.

메서드 설명
void init(ServletConfig config) 서블릿 인스턴스를 초기화
ServletConfig getServletConfig() 서블릿의 설정 정보를 반환
void service(ServletRequest req, ServletResponse res) 클라이언트의 요청을 처리하고 응답을 생성
String getServletInfo() 서블릿의 정보를 리턴
void destroy() 서블릿 인스턴스를 종료하고 리소스를 정리
String getServletName() 서블릿의 이름을 리턴
ServletContext getServletContext() 서블릿 컨텍스트 객체를 리턴
String getInitParameter(String name) 지정된 초기화 매개변수의 값을 리턴
Enumeration<String> getInitParameterNames() 서블릿의 모든 초기화 매개변수의 이름을 리턴

이외에도 GenericServlet , HttpServlet 클래스도 참고해 보면 좋다.