[F-Lab 모각코 챌린지] 12일차 - JSP 와 서블릿, 서블릿 컨테이너
F-Lab 모각코 챌린지 12일차 jsp, servlet, servlet container 에 대해 학습 하고 정리 한 내용입니다.
![[F-Lab 모각코 챌린지] 12일차 - JSP 와 서블릿, 서블릿 컨테이너](/content/images/size/w1200/2023/06/-------_--------_-------6.png)
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
클래스도 참고해 보면 좋다.