오봉이와 함께하는 개발 블로그

스프링 MVC 1 - HTTP 요청 데이터 POST HTML Form 본문

BE/Servlet

스프링 MVC 1 - HTTP 요청 데이터 POST HTML Form

오봉봉이 2022. 8. 10. 18:13
728x90

HTTP 요청 데이터 - POST HTML Form

HTTP의 Form을 사용해서 클라이언트에서 서버로 데이터를 전송하는 방법을 알아보자
주로 회원 가입, 상품 주문 등에서 사용하는 방식이다.

  • 특징
    • 헤더에 명시를 해준다.
      • content-type: application/x-www-form-urlencoded
    • 메시지 바디에 쿼리 파라미터 형식으로 데이터를 전달한다.
      • username=hello&age=20

HTML 생성

먼저 HTML을 생성하자
접속 주소 : http://localhost:8080/basic/hello-form.html

<!-- src/main/webapp/basic/hello-form.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="/request-param" method="post">
  username: <input type="text" name="username" />
  age: <input type="text" name="age" />
  <button type="submit">전송</button>
</form>
</body>
</html>

전송

콘솔에 로그를 띄우는 코드는 다음 링크에 있는 코드다.

https://5bong2-develop.tistory.com/284

POST의 HTML Form을 전송하면 웹 브라우저는 다음 형식으로 HTTP 메시지를 만든다.

  • 요청 URL : http://localhost:8080/request-param(form에 action=""에 있는 URL을 따라감)
  • content-type: application/x-www-form-urlencoded
  • message body: username=hello&age=20(form에 입력하는 값이 작성된다.)

정리

application/x-www-form-urlencoded형식은 GET에서 본 쿼리 파라미터 형식과 같다.
따라서 쿼리 파라미터 조회 메서드를 그대로 사용할 수 있다.
클라이언트가 보기에는 두 방식이 차이가 있지만 서버 입장에서는 둘 형식이 동일하기 때문에 request.getParameter()로 구분없이 조회가 가능하다.

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

참고

content-type은 HTTP 메시지 바디의 데이터 형식을 지정한다.
GET URL 쿼리 파라미터 형식으로 클라이언트에서 서버로 전달할 때는 HTTP 메시지 바디를 사용하기 때문에 content-type이 없다.
하지만, POST HTML Form으로 데이터를 전달하면 HTTP 메시지 바디에 데이터를 포함해서 보내기 때문에 포함된 데이터가 어떤 형식인지 content-type을 꼭 지정해야 한다.(하지만 브라우저가 알아서 해줌)

Postman을 사용한 테스트

간단한 테스트에 HTMl Form을 만들기 귀찮기 때문에 Postman을 사용하자.

출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
Comments