JAVA 언어로 작성된 서버 측 프로그램, 웹 애플리케이션에서 클라이언트의 요청을 처리하고 동적인 웹 콘텐츠를 생성하는 데 중요한 역할
Servlet은 Java EE(Enterprise Edition)의 일부로, 플랫폼 독립적인 특성과 함께 멀티스레딩을 지원하여 여러 클라이언트의 요청을 동시에 처리할 수 있는 기능 제공

import java.io.IOException;
import jakarta.servlet.Servlet;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
// 단순히 클래스 생성 -> 서블릿으로 만들기 위해서는 implements Servlet 이용 -> 즉, 인터페이스 임을 알 수 있다.
public class MyServlet1 implements Servlet {
@Override
public ServletConfig getServletConfig() {
// 서블릿 설정 객체를 반환하려고 할 때
return null;
}
@Override
public String getServletInfo() {
// 서블릿 정보를 문자열의 형태로 반환하려고 할 때
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// 서블릿을 초기화 할 때
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// 요청과 응답 처리를 할 때
}
@Override
public void destroy() {
// 서블릿이 소멸할 때 동작
}
}
- web.xml 파일을 사용하는 방법
web.xml 파일은 Java EE 웹 애플리케이션의 배치 설명자(Deployment Descriptor)하나의 Servlet은 여러개의 경로를 갖을 수 있으나, 하나의 경로는 하나의 Servlet만을 가져야 한다!

<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>com.example.ExampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExampleServlet</servlet-name>
<url-pattern>/hello</url-pattern>
<url-pattern>/greetings</url-pattern>
</servlet-mapping>
ExampleServlet : /hello와 /greetings라는 두 개의 경로에 매핑되어 있음. 이 두 경로로 요청이 들어오면 항상 같은 서블릿이 호출됨.
servlet-name : 서블릿을 식별하는 이름(등록하고자하는 클래스 명), <servlet-mapping>에서 URL과의 매핑에 사용servlet-class : 요청을 처리할 실제 서블릿 클래스의 전체 이름(등록하고자하는 클래스 패키지 경로), 웹 컨테이너가 이 클래스를 기반으로 서블릿 인스턴스 생성url-pattern : 요청 URL 명
- Annotation 사용하는 방법
web.xml 파일 없이 Servlet을 등록 가능 → 코드의 가독성 향상, 설정 간소화@WebServlet: 서블릿 클래스를 정의하고 URL 패턴을 지정하는 데 사용@WebInitParam: 서블릿의 초기화 매개변수를 설정할 때 사용@WebFilter: 필터를 정의하여 특정 URL 패턴에 대한 요청을 처리하는 데 사용@WebListener: 리스너를 정의하여 서블릿 컨텍스트와 세션의 생명주기 관리import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/ExampleServlet")
public class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 응답의 콘텐츠 유형을 설정
response.setContentType("text/html");
// 클라이언트에 응답하기 위해 PrintWriter 객체 생성
PrintWriter out = response.getWriter();
// 응답 HTML 작성
out.println("<html><body>");
out.println("<h1>Hello from ExampleServlet!</h1>");
out.println("</body></html>");
}
}
@WebServlet("/ExampleServlet") : 이 어노테이션을 통해 서블릿이 처리할 경로 직접 지정/ExampleServlet로 요청할 경우 이 서블릿이 호출됨HelloServlet 클래스는 HttpServlet을 확장하여 서블릿 기능을 갖춤doGet 메소드doGet 메소드는 HttpServletRequest와 HttpServletResponse 객체를 매개변수로 받음/ExampleServlet 경로로 GET 요청을 보내면 doGet 메소드가 호출되어 응답 생성| 특징 | GET | POST |
|---|---|---|
| 목적 | 서버에서 리소스를 요청할 때 사용 | 서버에 데이터를 제출하거나 리소스를 생성할 때 사용 |
| 전송 방식 | URL의 query string(name/value 쌍)으로 전송 | HTTP 요청 본문(body)에 파라미터를 포함하여 전송 |
| 전송 데이터 길이 | 제한됨 (URL 길이 제한) | 제한 없음 (대량의 데이터 전송 가능) |
| 보안 | URL에 데이터가 노출되어 보안에 취약 | 본문에 데이터가 포함되어 URL에 노출되지 않음 |
| 캐시 가능성 | 캐시될 수 있음 | 캐시되지 않음 |
| 즐겨찾기 | 브라우저의 즐겨찾기 기능에 저장 가능 | 저장할 수 없음 |
| 사용 예시 | 검색 쿼리 전송, 데이터 조회 | 폼 데이터 제출, 파일 업로드 |
| 요청 반복성 | 안전한 요청 (서버 상태 변경 없음) | 비안전한 요청 (서버 상태 변경 가능) |