카테고리 없음

#17 HttpServlet

kmsoon 2024. 5. 23. 16:43

HttpServlet은 Java Servlet API의 일부로, HTTP 요청과 응답을 처리하는 웹 애플리케이션을 개발할 때 사용되는 서블릿 클래스다. HttpServlet은 javax.servlet.http 패키지에 포함되어 있으며, HTTP 프로토콜을 통해 웹 클라이언트(브라우저 등)와 서버 간의 통신을 처리하는 데 사용된다.

 

 

 

 

HttpServlet의 주요 기능과 특징:

  1. 추상 클래스:
    • HttpServlet은 추상 클래스이기 때문에 직접 인스턴스화할 수 없으며, 이를 상속받아 필요한 메서드를 구현해야 한다.
  2. 기본 메서드:
    • HttpServlet은 HTTP 요청의 다양한 유형(GET, POST, PUT, DELETE 등)을 처리하기 위한 기본 메서드를 제공한다. 이들 메서드는 필요에 따라 오버라이드하여 사용된다.
      • doGet(HttpServletRequest req, HttpServletResponse resp): GET 요청을 처리한다.
      • doPost(HttpServletRequest req, HttpServletResponse resp): POST 요청을 처리한다.
      • doPut(HttpServletRequest req, HttpServletResponse resp): PUT 요청을 처리한다.
      • doDelete(HttpServletRequest req, HttpServletResponse resp): DELETE 요청을 처리한다.
      • 기타 doHead, doOptions, doTrace 등도 존재한다.
  3. HttpServletRequest와 HttpServletResponse:
    • HttpServletRequest: 클라이언트가 보낸 HTTP 요청 정보를 캡슐화한 객체로, 요청 파라미터, 헤더, 세션 정보 등을 제공한다.
    • HttpServletResponse: 서버가 클라이언트로 보낼 HTTP 응답을 캡슐화한 객체로, 응답 코드, 헤더, 콘텐츠 등을 설정할 수 있다.
  4. 라이프사이클 메서드:
    • init(): 서블릿이 초기화될 때 호출된다. 서블릿 인스턴스가 생성된 후 딱 한 번 호출된다.
    • service(HttpServletRequest req, HttpServletResponse resp): 각 요청마다 호출되며, 기본적으로 요청 메서드(GET, POST 등)에 따라 적절한 doXXX 메서드를 호출한다.
    • destroy(): 서블릿이 종료될 때 호출된다. 서블릿이 더 이상 사용되지 않을 때 정리 작업을 수행한다.

 

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")
public class HelloServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write("<h1>Hello, World!</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // POST 요청 처리 로직
    }
}

 

 

  1. 클래스 정의:
    • HelloServlet 클래스는 HttpServlet을 상속받아 정의된다.
  2. @WebServlet 어노테이션:
    • 서블릿을 특정 URL 패턴(/hello)에 매핑한다. 이는 web.xml 파일을 사용하지 않고도 서블릿을 매핑할 수 있게 한다.
  3. doGet 메서드:
    • GET 요청을 처리하기 위해 오버라이드된다. 요청이 오면 응답 타입과 인코딩을 설정하고, 간단한 HTML 메시지를 클라이언트로 보낸다.
  4. doPost 메서드:
    • POST 요청을 처리하기 위해 오버라이드된다. 실제 구현에서는 POST 요청에 대한 로직을 추가할 수 있다.

추가 정보:

  • 세션 관리: HttpServletRequest 객체를 통해 세션을 생성하거나 기존 세션에 접근할 수 있다. HttpSession 객체를 사용하여 사용자 데이터를 저장하고 관리한다.
  • 예외 처리: 서블릿에서 발생하는 예외는 ServletException 또는 IOException으로 처리할 수 있다.
  • 필터: 서블릿에 요청이 도달하기 전/후에 요청/응답을 가로채고 처리할 수 있는 필터를 사용하여 보안, 로깅, 인증 등의 기능을 추가할 수 있다.

HttpServlet을 사용하면 웹 애플리케이션에서 HTTP 프로토콜을 통해 다양한 요청을 처리하는 기능을 쉽게 구현할 수 있다. 이는 Java EE (이제는 Jakarta EE) 환경에서 중요한 구성 요소다.