서블릿의 개요
서블릿의 개요
서블릿은 Java로 작성된 서버 측 프로그램으로, 웹 애플리케이션에서 HTTP 요청을 처리하고 동적인 콘텐츠를 생성해 클라이언트(브라우저)에 응답을 보내는 역할을 합니다. 주로 웹 컨테이너(예: Tomcat)에서 실행되며, HTML, JSON 등 다양한 형식을 생성할 수 있어요. 서블릿은 멀티스레딩을 지원해 여러 요청을 동시에 처리하며, 데이터베이스와 연동해 동적 웹 페이지를 제공하는 데 사용됩니다.
javax.servlet.http.HttpServletRequest 와 javax.servlet.http.HttpServletResponse 객체는 Java Servlet에서 HTTP 요청과 응답을 다룰 때 사용됩니다. 서블릿(Servlet)을 만들면 doGet()이나 doPost() 메서드 안에서 이 객체들을 자동으로 전달받습니다.
예제 코드와 함께 설명드릴게요:
✅ 예제: 서블릿에서
HttpServletRequest
와
HttpServletResponse
사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello") // URL 매핑
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 요청에서 파라미터 가져오기
String name = request.getParameter("name");
// 응답 설정
response.setContentType("text/html; charset=UTF-8");
// 응답에 출력
response.getWriter().println("<html><body>");
response.getWriter().println("<h1>Hello, " + name + "!</h1>");
response.getWriter().println("</body></html>");
}
}
🧠 주요 개념
| 항목 | 설명 |
|---|---|
| HttpServletRequest request | 클라이언트가 보낸 요청 정보를 담고 있음 (파라미터, 헤더, 쿠키 등) |
| HttpServletResponse response | 서버가 클라이언트에게 보낼 응답 내용을 설정할 때 사용 (헤더 설정, 데이터 출력 등) |
📌 파라미터 예시
사용자가 브라우저에서 다음 URL로 접근한다고 가정:
1
http://localhost:8080/hello?name=Heddo
그러면 request.getParameter(“name”) 은 “Heddo” 값을 반환
좋은 질문이에요!
서블릿(Servlet)은 Java에서 웹 애플리케이션을 만들 때 사용되는 컴포넌트로, 서버에서 실행되는 작은 Java 프로그램입니다. 서블릿은 웹 요청을 처리하고 웹 응답을 생성합니다.
서블릿의 생명 주기(Lifecycle)는 크게 다음의 3단계 메서드로 관리됩니다:
🔄 서블릿 생명주기 (Servlet Lifecycle)
1
2
3
4
@Override
public void init() throws ServletException {
System.out.println("서블릿 초기화됨");
}
- 🧠 예: 서버가 시작되거나 처음 요청이 올 때 서블릿이 메모리에 로딩되고, init()이 실행됨.
service()
### 메서드
클라이언트로부터 요청이 들어올 때마다 호출됨.
이 메서드는 요청 방식(GET, POST 등)에 따라 자동으로 doGet(), doPost() 등으로 분기됨.
1
2
3
4
5
6
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("요청 처리 중...");
super.service(req, resp); // 이걸 호출하면 doGet/doPost로 넘어감
}
- 보통 우리가 작성하는 doGet() 또는 doPost()는 service() 내부에서 호출됩니다.
1
2
3
4
@Override
public void destroy() {
System.out.println("서블릿 종료됨");
}
🔁 전체 흐름 요약
1
2
3
4
5
6
7
8
9
(서버 시작 또는 첫 요청)
↓
init() ← 딱 한 번
↓
service() 호출 ← 요청마다 반복
↓
(doGet(), doPost(), 등)
↓
destroy() ← 서버 종료 시
💡 추가 팁
이 모든 메서드는 HttpServlet 클래스에서 제공되고, 우리가 상속받아 오버라이드해서 사용합니다.
보통 실무에서는 init()은 초기 설정, doGet()/doPost()에 비즈니스 로직, destroy()는 정리 작업에 사용합니다.
서블릿 초기화 -> 초기에 한번만 실행 service()/doGet()/doPost() -> 스레드를 통해 동시에 실행됨 destroy() -> 종료할 때 한번만 실행