Servlet 개념 정리

홍나연·2024년 9월 29일

Backend

목록 보기
1/8

Servlet이란

Servlet 개념

JAVA 언어로 작성된 서버 측 프로그램, 웹 애플리케이션에서 클라이언트의 요청을 처리하고 동적인 웹 콘텐츠를 생성하는 데 중요한 역할

Servlet은 Java EE(Enterprise Edition)의 일부로, 플랫폼 독립적인 특성과 함께 멀티스레딩을 지원하여 여러 클라이언트의 요청을 동시에 처리할 수 있는 기능 제공


Servlet 생명주기 (Lift-Cycle)

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() { 
		// 서블릿이 소멸할 때 동작 
	}
	
}

Servlet을 등록하는 2가지 방법

  1. web.xml 파일을 사용하는 방법
  • web.xml 파일은 Java EE 웹 애플리케이션의 배치 설명자(Deployment Descriptor)
  • 웹 애플리케이션의 구성과 Servlet을 등록하는 데 사용
  • 이 방법은 전통적인 방식으로, XML 형식으로 Servlet을 정의하고 매핑

하나의 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 명
  1. Annotation 사용하는 방법
  • JAVA 코드 내에서 클래스, 메서드, 변수 등의 메타데이터를 정의하는 방식
  • Servlet API는 여러 어노테이션을 제공하여 웹 애플리케이션을 구성할 수 있음
  • 장점
    • 어노테이션을 사용하면 web.xml 파일 없이 Servlet을 등록 가능 → 코드의 가독성 향상, 설정 간소화
    • 코드를 수정하는 것만으로 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을 확장하여 서블릿 기능을 갖춤
    이 클래스는 웹 애플리케이션에서 HTTP 요청을 처리하는 데 필요한 메소드 제공
  • doGet 메소드
    :
    GET 요청이 들어올 때 호출됨
    doGet 메소드는 HttpServletRequestHttpServletResponse 객체를 매개변수로 받음
  • 요청 처리
    : 클라이언트가 /ExampleServlet 경로로 GET 요청을 보내면 doGet 메소드가 호출되어 응답 생성
    이 메소드 내에서 클라이언트에게 "Hello from ExampleServlet!" 메시지가 포함된 HTML 페이지 반환

HTTP 요청 및 응답 처리

  • HttpServletRequest
    클라이언트의 요청 정보를 포함하는 객체
    요청의 메소드(GET, POST 등), 파라미터 등을 가져올 수 있음
  • HttpServletResponse
    클라이언트에 대한 응답을 생성하는 객체
    응답의 콘텐츠 타입, 상태 코드 등을 설정하고, 클라이언트에게 데이터를 전송할 수 있음

GET과 POST

특징GETPOST
목적서버에서 리소스를 요청할 때 사용서버에 데이터를 제출하거나 리소스를 생성할 때 사용
전송 방식URL의 query string(name/value 쌍)으로 전송HTTP 요청 본문(body)에 파라미터를 포함하여 전송
전송 데이터 길이제한됨 (URL 길이 제한)제한 없음 (대량의 데이터 전송 가능)
보안URL에 데이터가 노출되어 보안에 취약본문에 데이터가 포함되어 URL에 노출되지 않음
캐시 가능성캐시될 수 있음캐시되지 않음
즐겨찾기브라우저의 즐겨찾기 기능에 저장 가능저장할 수 없음
사용 예시검색 쿼리 전송, 데이터 조회폼 데이터 제출, 파일 업로드
요청 반복성안전한 요청 (서버 상태 변경 없음)비안전한 요청 (서버 상태 변경 가능)

0개의 댓글