[Day 24 | JSP] HttpServletRequest, HttpServletResponse

y♡ding·2024년 11월 14일
0

데브코스 TIL

목록 보기
148/163

HttpServletRequestHttpServletResponse는 서블릿 API에서 클라이언트의 요청과 서버의 응답을 처리하는 데 사용되는 주요 인터페이스입니다. 이 두 객체는 서블릿이 요청을 처리하고, 결과를 클라이언트에게 전달하는 데 필요한 데이터를 제공합니다.


1. HttpServletRequest - 클라이언트 요청 정보

HttpServletRequest 객체는 클라이언트가 서버에 전송한 HTTP 요청 정보를 포함하고 있습니다. 클라이언트가 전송한 요청의 메타데이터와 데이터(쿼리 파라미터, 헤더, 쿠키, 세션 정보 등)에 접근할 수 있도록 다양한 메서드를 제공합니다.

주요 메서드

  1. getParameter(String name):
    • 클라이언트가 전송한 요청 파라미터를 가져옵니다. 폼 데이터와 쿼리 문자열을 읽을 때 주로 사용됩니다.
    • 예: request.getParameter("username")
  2. getParameterValues(String name):
    • 동일한 이름을 가진 여러 파라미터의 값을 배열 형태로 가져옵니다. 예를 들어, 체크박스와 같이 여러 값을 선택할 수 있는 요소에서 유용합니다.
    • 예: request.getParameterValues("hobbies")
  3. getMethod():
    • 요청의 HTTP 메서드(GET, POST 등)를 반환합니다.
    • 예: request.getMethod()
  4. getRequestURI():
    • 클라이언트가 요청한 URI를 반환합니다.
    • 예: request.getRequestURI()
  5. getHeader(String name):
    • 요청 헤더의 값을 가져옵니다. 예를 들어, User-Agent 헤더를 통해 클라이언트의 브라우저 정보를 얻을 수 있습니다.
    • 예: request.getHeader("User-Agent")
  6. getSession():
    • 현재 요청과 관련된 세션 객체를 반환합니다. 세션을 통해 사용자의 상태를 유지할 수 있습니다.
    • 예: request.getSession()
  7. getRemoteAddr():
    • 클라이언트의 IP 주소를 반환합니다.
    • 예: request.getRemoteAddr()

예시

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    String userAgent = request.getHeader("User-Agent");
    String requestURI = request.getRequestURI();

    System.out.println("사용자 이름: " + username);
    System.out.println("User-Agent: " + userAgent);
    System.out.println("Request URI: " + requestURI);
}

2. HttpServletResponse - 서버 응답 정보

HttpServletResponse 객체는 서버가 클라이언트로 전송할 HTTP 응답을 구성하는 데 필요한 정보를 제공합니다. 이 객체를 통해 응답 헤더, 상태 코드, 컨텐츠 유형 등을 설정하고, 최종적으로 클라이언트에게 데이터를 보낼 수 있습니다.

주요 메서드

  1. setContentType(String type):
    • 응답의 컨텐츠 유형(Content-Type)을 설정합니다. 예를 들어, text/html, application/json 등을 지정할 수 있습니다.
    • 예: response.setContentType("text/html;charset=UTF-8");
  2. setCharacterEncoding(String charset):
    • 응답의 문자 인코딩을 설정합니다. 주로 UTF-8로 설정하여 다국어 지원을 합니다.
    • 예: response.setCharacterEncoding("UTF-8");
  3. setStatus(int statusCode):
    • 응답 상태 코드를 설정합니다. 예를 들어, 200(성공), 404(찾을 수 없음), 500(서버 오류) 등의 상태 코드를 지정할 수 있습니다.
    • 예: response.setStatus(HttpServletResponse.SC_OK);
  4. getWriter():
    • 출력 스트림을 반환하여, 클라이언트에게 텍스트 데이터를 보낼 수 있도록 합니다. 주로 HTML이나 JSON을 작성할 때 사용됩니다.
    • 예: PrintWriter out = response.getWriter(); out.println("<h1>Hello, World!</h1>");
  5. sendRedirect(String location):
    • 클라이언트를 다른 URL로 리다이렉트합니다. 주로 로그인 성공 후 특정 페이지로 이동할 때 사용됩니다.
    • 예: response.sendRedirect("/home");
  6. addCookie(Cookie cookie):
    • 클라이언트에게 쿠키를 전송합니다. 이를 통해 사용자 세션을 유지하거나 사용자 맞춤 설정을 제공합니다.
    • 예: response.addCookie(new Cookie("user", "JohnDoe"));

예시

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    response.setStatus(HttpServletResponse.SC_OK);

    PrintWriter out = response.getWriter();
    out.println("<html><body>");
    out.println("<h1>Hello, this is the server's response!</h1>");
    out.println("</body></html>");
}

HttpServletRequest와 HttpServletResponse의 활용 예

다음은 사용자로부터 요청을 받아 처리하고 응답을 생성하는 간단한 예제입니다.

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/greet")
public class GreetServlet 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");

        // 응답 출력
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        if (name != null && !name.isEmpty()) {
            out.println("<h1>안녕하세요, " + name + "님!</h1>");
        } else {
            out.println("<h1>안녕하세요, 방문자님!</h1>");
        }
        out.println("</body></html>");
    }
}
  • HttpServletRequest: request.getParameter("name")을 통해 클라이언트가 입력한 이름을 가져옵니다.
  • HttpServletResponse: response.setContentType("text/html;charset=UTF-8");로 응답 유형과 인코딩을 설정하고, PrintWriter를 통해 HTML 응답을 출력합니다.

요약

  • HttpServletRequest는 클라이언트의 요청 정보를 처리하며, URL, HTTP 메서드, 파라미터, 헤더 정보, 쿠키 등 요청과 관련된 다양한 메서드를 제공합니다.
  • HttpServletResponse는 서버의 응답을 구성하며, 컨텐츠 유형, 상태 코드, 리다이렉트, 쿠키 등 응답과 관련된 여러 메서드를 통해 클라이언트에게 응답을 보낼 수 있습니다.

이 두 객체는 서블릿에서 요청과 응답을 처리하는 기본적인 도구로, HTTP 통신을 통해 클라이언트와 서버 간에 데이터를 주고받는 데 중요한 역할을 합니다.

0개의 댓글

관련 채용 정보