자바 웹 개발 기초: 서블릿부터 Spring MVC까지 단계별 실습 - 3. HttpServletRequest & HttpServletResponse

조아·2025년 3월 4일

1. HttpServletRequest - 요청 데이터 조회

클라이언트에서 서버로 데이터를 전달하는 방법을 정리

1.1 요청 정보 조회 (RequestHeaderServlet)

request.getMethod();       // HTTP 메서드(GET, POST 등)
request.getProtocol();     // HTTP/1.1 등
request.getScheme();       // http, https
request.getRequestURL();   // 전체 URL
request.getRequestURI();   // URI 경로
request.getQueryString();  // 쿼리 파라미터
request.isSecure();        // HTTPS 사용 여부

출력 결과

request.getMethod() = GET
request.getRequestURL() = http://localhost:8080/request-header
request.getRequestURI() = /request-header
request.getQueryString() = username=hello

1.2 헤더 조회

request.getHeader("User-Agent"); // 특정 헤더 조회
request.getHeaderNames().asIterator()
        .forEachRemaining(name -> System.out.println(name + ": " + request.getHeader(name)));

출력 결과


1.3 편리한 조회 메서드

request.getServerName();  // Host 이름
request.getServerPort();  // Host 포트
request.getLocale();      // 언어 설정
request.getCookies();     // 쿠키 정보
request.getContentType(); // 요청 Content-Type
request.getCharacterEncoding(); // 문자 인코딩

1.4 GET 방식 쿼리 파라미터 조회

String username = request.getParameter("username");  // 단일 파라미터 조회
request.getParameterNames().asIterator()
        .forEachRemaining(param -> System.out.println(param + "=" + request.getParameter(param)));
String[] usernames = request.getParameterValues("username"); // 동일한 이름의 여러 값 조회

결과

http://localhost:8080/request-param?username=hello&username=kim&age=20


1.5 POST - HTML Form 데이터 조회

  • application/x-www-form-urlencoded 형식의 데이터를 request.getParameter() 로 조회 가능

1.6 HTTP Body 데이터 직접 읽기

ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

결과

{"username": "hello", "age": 20}

Jackson 사용하여 JSON 파싱:

HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);

2. HttpServletResponse - 응답 데이터 생성

서버에서 클라이언트로 응답을 보낼 때 사용

2.1 기본 응답 설정

response.setStatus(HttpServletResponse.SC_OK); // HTTP 200 상태 코드 설정
response.setHeader("Content-Type", "text/plain;charset=utf-8"); // 응답 헤더 설정
response.getWriter().write("ok"); // 응답 바디 전송

2.2 응답 헤더 설정

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");

2.3 Content 편의 메서드

response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");

2.4 쿠키 설정

Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); // 600초 동안 유지
response.addCookie(cookie);

2.5 리다이렉트

response.sendRedirect("/basic/hello-form.html"); // 302 리다이렉트

2.6 HTML 응답

response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.println("<html><body><div>안녕?</div></body></html>");

2.7 JSON 응답

response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData data = new HelloData();
data.setUsername("kim");
data.setAge(20);
String result = objectMapper.writeValueAsString(data);
response.getWriter().write(result);

출력 결과

{"username":"kim","age":20}

3. 정리

  • HttpServletRequest

    • 요청 정보 조회 (메서드, URL, 쿼리 파라미터)
    • 헤더 조회 및 편리한 조회 메서드 제공
    • GET/POST 요청 파라미터 조회
    • HTTP Body 데이터 직접 읽기 (JSON 파싱 가능)
  • HttpServletResponse

    • 상태 코드 및 헤더 설정
    • 텍스트, HTML, JSON 응답 생성 가능
    • 쿠키 설정, 리다이렉트 가능
profile
프론트엔드 개발자

0개의 댓글