Servlet
2025. 5. 29. 15:30ㆍServer
Servlet
- Server + Applet의 합성어 (Applet = Application + let (작은) = 작은 애플리케이션)
- 자바 서블릿(Java Servlet) : 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램
- 웹 컨테이너에서 실행되는 자바 기반 웹 컴포넌트
- 클라이언트 요청 처리 후 동적 응답(HTML) 생성
- 멀티스레드 환경에서 효율적 처리
1. 배포 서술자(web.xml)을 이용한 서블릿 등록/매핑
- web.xml
- 웹 애플리케이션 배포 서술자(Deployment Descriptor)
- 웹 애플리케이션의 설정 정보를 담은 XML 파일
- 서블릿, 필터, 리스너 등의 구성 요소 등록 및 매핑
- Tomcat 등의 웹 컨테이너가 시작 될 때 읽음
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- Servlet 등록
- Servlet 컴포넌트 클래스 정보를 웹 컨테이너에게 알려줌
- 클래스 정보가 길기 때문에 별칭(helloServlet) 등록
-->
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>org.package.HelloServlet</servlet-class>
</servlet>
<!-- Servlet 매핑
- "/hello-servlet" 주소 요청 시
웹 컨테이너에 등록된 Servlet 중 별칭이 "helloServlet"인 클래스를 찾음
-> Servlet Container가 해당 클래스를 객체로 만들어서 관리(Servlet Life Cycle)
-->
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello-servlet</url-pattern>
</servlet-mapping>
</web-app>
<!-- web.xml 수정 후에는 반드시 웹서버를 재기동 필요 -->
2. @WebServlet 어노테이션을 이용한 서블릿 등록/매핑
- XML 파일 대신 자바 코드에 직접 설정
- 코드와 설정의 통합 관리
- 동적 로딩: 서버 재시작 없이 반영 (개발 모드)
@WebServlet("/hello-servlet")
// 복수 매핑: @WebServlet(name="helloServlet", urlPatterns={"/xxx", "/yyy"})
// value 속성 사용 : @WebServlet(name="helloServlet", value={"/aaa", "/bbb"})
public class HelloServlet extends HttpServlet {
// 서블릿 코드
}
서블릿 핵심 API
- Apache + Tomcat 요청/응답 구조
- 웹 컨테이너에서 URL 요청에 맞는 Servlet을 실행
- 요청 처리 결과를 HTML 형태로 구성하여 클라이언트에게 응답
**[웹 브라우저]** ↔ **[Apache httpd]** ↔ **[Tomcat]** ↔ **[Database]** HTTP 요청/응답 웹 컨테이너 데이터 처리

- HttpServletRequest
- HTTP 요청의 모든 정보(클라이언트 요청, 쿠키, 세션 등)를 제공하는 인터페이스
- HttpServletRequest 주요 메서드
| 메서드 | 설명 |
|---|---|
| getHeader(String name) | HTTP 헤더 값 조회 |
| getParameter(String name) | 요청 파라미터 값 조회 |
| getParameterNames() | 모든 파라미터 이름 조회 |
| getRequestURI() | 요청 URI 조회 |
| getServletPath() | 서블릿 경로 조회 |
| getSession() | 세션 객체 조회 |
| setAttribute(String, Object) | 속성 설정 |
| getAttribute(String) | 속성 조회 |
- HttpServletResponse
- HTTP 응답의 내용(HTML, JSON 등), 헤더, 쿠키, 상태 코드 등을 설정하여 제공하는 인터페이스
- Servlet으로 들어온 요청은 텍스트(HTML)로 응답을 보내기 때문에 출력 스트림을 받기 위해 주로 response로부터
writer객체를 얻어서 내보낸다 - HttpServletResponse 주요 메서드
| 메서드 | 설명 |
|---|---|
| setContentType(String) | 응답 콘텐츠 타입 설정 |
| getWriter() | 문자 출력 스트림 |
| getOutputStream() | 바이너리 출력 스트림 |
| sendRedirect(String) | 리다이렉트 처리 |
| addHeader(String, String) | 응답 헤더 추가 |
| setStatus(int) | HTTP 상태 코드 설정 |
생명주기(Life Cycle)
Servlet 생명주기 (JSP도 같음)

- 클라이언트가 URL을 이용채 서버에 요청 시 HTTP Request를 Servlet Container로 전송
- HTTP Request를 전송 받은 Servlet Container는 HttpServletRequest(요청), HttpServletResponse(응답) 객체를 생성
- DD (배포서술자, Deployment Descriptor, web.xml)를 이용해
요청 URL을 분석하여 어떤 Servlet Class가 요청을 처리할지 찾음 - 요청이 들어오면 Servlet 클래스가 로딩되어 Servlet 객체 생성
- 서버가 메소드를 init()을 호출하여 Servlet을 초기화
- service() 메소드가 호출되어 Servlet이 브라우저의 요청을 처리
- service() 메소드는 요청 유형에 따라 해당하는 HTTP 요청(GET, POST 등)을 처리하는 메서드(doGet(), doPost() 등)를 호출
→ 해당 메서드에서 응답을 위한 동적 콘텐츠 생성 코드(java, html)를 작성 - HttpServletResponse 객체를 이용해 클라이언트에게 응답을 돌려줌\
- 서버가 destroy() 메소드를 호출하여 Servlet을 제거
⇒ 동일한 로직과 결과를 반복적으로 수행하는 작업은 init() 메서드에서 한 번만 처리
각 메서드 역할
- init() 메서드:
- 호출 시점: 서블릿 인스턴스 최초 생성 시 1번만
- 용도: 초기화 작업 (DB 연결, 설정 파일 로딩)
- service() 메서드:
- 호출 시점: 클라이언트 요청마다 매번
- 용도: 응답을 위한 동적 콘텐츠 생성
- 분기: HTTP 메서드에 따라 doGet(), doPost() 호출
- destroy() 메서드:
- 호출 시점: 서블릿 인스턴스 소멸 시 1번만(코드 변경 등의 상황으로 재배포될 때)
- 용도: 리소스 정리 (DB 연결 해제, 파일 닫기)
참고자료
- ITYL 6기 수업자료
- https://ko.wikipedia.org/wiki/자바_서블릿
- https://mrlazydev.tistory.com/entry/JSPServlet서블릿이란?category=1070022
- https://wodonggun.github.io/study/아파치-톰캣-차이.html
- https://velog.io/@green9930/HttpServletRequest-HttpServletResponse-정리
- https://victorydntmd.tistory.com/154
- https://kadosholy.tistory.com/47
'Server' 카테고리의 다른 글
| JSP (1) | 2025.05.29 |
|---|---|
| WA (Web Application) (1) | 2025.05.29 |