[스프링 MVC 1편] 2. 서블릿 (2)

0woogie·2024년 4월 1일
0

스프링 MVC 1편

목록 보기
6/7
post-thumbnail

HttpServletRequest - 개요

서블릿은 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다.

HttpServletRequest를 사용하면 다음과 같은 HTTP 요청 메시지를 편리하게 조회할 수 있다!

  • START LINE
    - HTTP 메서드
    - URL
    - 쿼리 스트링
    - 스키마, 프로토콜
  • 헤더
    - 헤더 조회
  • 바디
    - form 파라미터 형식 조회
    - message body 데이터 직접 조회

HttpServletRequest 객체는 추가로 여러가지 부가기능을 함께 제공한다.

임시 저장소 기능

  • 해당 HTTP 요청이 시작부터 끝날 때까지 유지되는 임시 저장소 기능
    - 저장: request.setAttribute(name, value)
    - 조회: request.getAttribute(name)

세션 관리 기능

  • request.getSession(create: true)

HttpServletRequest, HttpServletResponse를 사용할 때 가장 중요한 점은 이 객체들이 HTTP 요청 메시지, HTTP 응답 메시지를 편리하게 사용하도록 도와주는 객체라는 점이다. 따라서 이 기능에 대해서 깊이있는 이해를 하려면 HTTP 스펙이 제공하는 요청, 응답 메시지 자체를 이해해야 한다.

HTTP 요청 데이터 - 개요

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법은 주로 다음 3가지

  • GET - 쿼리 파라미터
    - 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
    - 예) 검색, 필터, 페이징 등에서 많이 사용하는 방식
  • POST - HTML Form
    - content-type: application/x-www-form-urlencoded
    - 메시지 바디에 쿼리 파라미터 형식으로 전달
  • HTTP message body에 데이터를 직접 담아서 요청
    - HTTP API에서 주로 사용
    - 데이터 형식은 주로 JSON 사용 (+XML, TEXT..)
    - POST, PUT, PATCH

HTTP 요청 데이터 - GET 쿼리 파라미터

request.getParameter()는 하나의 파라미터 이름에 대해서 단 하나의 값만 있을 때 사용해야 한다. 위의 경우와 같이 중복일 때는 request.getParameterValues()를 사용해야 한다. 중복일 때 request.getParameter()를 사용하면 request.getParameterValues()의 첫 번째 값을 반환한다.

HTTP 요청 데이터 - POST HTML Form

  • hello-form.html 생성

  • 웹 브라우저 요청 화면 (Postman을 사용해도 됨)

  • application/x-www-form-urlencoded 형식은 앞서 GET에서의 쿼리 파라미터 형식과 동일
    - 쿼리 파라미터 조회 메서드를 그대로 사용하면 됨

  • request.getParameter()는 GET URL 쿼리 파라미터 형식도 지원하고, POST HTML Form 형식도 둘 다 지원

content-type

  • HTTP 메시지 바디의 데이터 형식을 지정함
  • GET URL 쿼리 파라미터 형식으로 클라이언트에서 서버로 데이터를 전달할 때는 HTTP 메시지 바디를 사용하지 않기 때문에 content-type이 없다.
  • POST HTML Form 형식으로 데이터를 전달하면 HTTP 메시지 바디에 해당 데이터를 포함해서 보내기 때문에 content-type을 꼭 지정해야 함!
    - 위와 같이 폼으로 데이터를 전송하는 형식은 application/x-www-form-urlencoded

HTTP 요청 데이터 - API 메시지 바디 (JSON)

JSON 형식 파싱 추가

JSON 형식으로 파싱할 수 있게 객체를 하나 생성하자

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class HelloData {
    private String username;
    private int age;
}
  • RequestBodyJsonServlet
    - JSON 결과를 파싱해서 자바 객체로 변환하기 위해 ObjectMapper 사용
    - ObjectMapper는 Jackson 라이브러리에 존재

  • 실행 결과

Reference

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

profile
정리하고 다듬기 위한 공간

0개의 댓글