web.xml과 애너테이션으로 서블릿 매핑 및 GET/POST 요청 처리

web.xml과 애너테이션으로 서블릿 매핑 및 GET/POST 요청 처리

서블릿(Servlet)은 자바 기반의 서버 측 기술로, 클라이언트의 HTTP 요청을 처리하고 그에 대한 응답을 생성하는 역할을 합니다. JSP와 유사한 기능을 하지만, 서블릿은 순수 자바로 작성되어 있으며, 보다 명시적으로 서버 요청을 처리할 수 있습니다. 이번 글에서는 서블릿의 기본 개념과 설정 방법을 살펴보고, 실제로 GET 및 POST 요청을 처리하는 예제를 알아보겠습니다.

1. 서블릿이란?

서블릿은 웹 애플리케이션에서 동적으로 데이터를 처리하고 응답하는 컴포넌트입니다. 서블릿은 다음과 같은 역할을 합니다.

  • 클라이언트의 요청을 수신
  • 비즈니스 로직을 처리
  • HTML, JSON 등의 응답 생성

서블릿은 JSP와 달리 HTML 코드와 자바 코드가 혼합되지 않고, 더 명확하게 서버 측 로직을 처리할 수 있는 이점이 있습니다.

2. 서블릿 설정 및 환경 구성

2.1 전통적 방식 (web.xml을 사용한 서블릿 설정)

web.xml 파일을 사용해 서블릿을 설정하는 방법은 전통적인 방식입니다. 프로젝트의 WEB-INF 디렉토리에 위치한 web.xml 파일을 수정하여 서블릿을 매핑할 수 있습니다.

web.xml을 사용한 서블릿 설정 예제

<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.bluesharehub.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

위 설정은 /hello 경로로 들어오는 요청을 HelloServlet 클래스에 매핑하는 방식입니다.

서블릿 코드 (HelloServlet.java)

package com.bluesharehub;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 응답의 콘텐츠 타입 설정
        response.setContentType("text/html");

        // 클라이언트에게 반환할 HTML 내용 작성
        response.getWriter().write("<h1>Hello, BlueShareHub!</h1>");
    }

}

실행 결과

web.xml을 사용한 서블릿 설정 예제 코드 실행 결과 화면

2.2 애너테이션을 사용한 서블릿 설정

애너테이션을 사용하면 서블릿 설정을 더욱 간편하게 처리할 수 있습니다. @WebServlet 애너테이션을 사용하여 서블릿을 매핑할 수 있습니다.

애너테이션을 사용한 서블릿 설정 예제

package com.bluesharehub;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello2")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.setContentType("text/html");
        response.getWriter().write("<h1>Hello, BlueShareHub!</h1>");
    }
}

위 코드는 애너테이션으로 간편하게 서블릿을 매핑한 방식입니다. 이제 /hello2 경로로 요청이 들어오면 HelloServlet 클래스에서 해당 요청을 처리하고, 클라이언트에게 응답을 반환합니다.

실행 결과

애너테이션을 사용한 서블릿 설정 예제 코드 실행 결과 화면

3. POST 요청 처리 예제

서블릿은 GET 요청뿐만 아니라 POST 요청도 처리할 수 있습니다. POST 요청은 주로 클라이언트가 서버에 데이터를 전송할 때 사용됩니다. POST 요청은 서블릿의 doPost 메서드를 사용하여 처리됩니다.

POST 요청 처리 예제 코드

@WebServlet("/submit")
public class SubmitServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 클라이언트로부터 전달된 데이터 (예: form 데이터)
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        // 간단한 응답 처리
        response.setContentType("text/html");
        if (username != null && password != null) {
            response.getWriter().write("<h1>Welcome, " + username + "!</h1>");
        } else {
            response.getWriter().write("<h1>Missing username or password</h1>");
        }
    }
}

이 예제에서는 /submit 경로로 POST 요청이 들어올 때 doPost 메서드에서 클라이언트로부터 전달된 데이터를 처리합니다. 이 방식은 보통 로그인 폼이나 데이터 입력 폼에서 사용됩니다. 사용자가 HTML 폼을 통해 usernamepassword를 제출하면 서블릿이 그 데이터를 받아 응답을 생성하게 됩니다.

함께 보면 좋은 이전 게시글

위로 스크롤