서블릿(Servlet) - HTTP 요청 데이터 : 개요, GET 쿼리 파라미터, POST HTML Form

2021. 6. 27. 15:45·교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

인프런 김영한 님의 스프링 강의이며, 2섹션 - 서블릿(Servlet)를 정리한다.

실습형 교육으로 자세한 설명이 궁금하면 수강을 권장한다. 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com


HTTP 요청 데이터 - 개요

서버로 데이터를 전달하는 방법은 3가지가 있다.

1. GET - 쿼리 파라미터

- /url?username=hello&age20

- 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달하는 방식

예) 검색, 필터, 페이징 등에서 사용된다.

 

2. POST - HTML form

- content-type: application/xwww-form-urlencoded

- 메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age20

예) 회원가입, 상품 주문 등에 HTML Form 사용

 

3. HTTP message Body

- HTTP API에서 주로 사용, JSON(독보적), XML, TEXT

- POST, PUT, PATCH

 


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

쿼리 파라미터는 url 뒤에 ?를 시작으로 보낼 수 있다. 추가 파라미터는 & 로 구분한다. 

?key=value&key=value 로 넣어주면 된다. 

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

 

파라미터 조회 방법

1. 전체 파라미터 조회

@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("[전체 파라미터 조회] - start");
        request.getParameterNames().asIterator()
                .forEachRemaining(paramName -> System.out.println(paramName + "=" + request.getParameter(paramName)));
        System.out.println("[전체 파라미터 조회] - end");
    }
}

위의 url를 넣고 실행하면 결과가 나온다.

[전체 파라미터 조회] - start
username=hello
age=20
[전체 파라미터 조회] - end

2. 단일 파라미터 조회

@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("[단일 파라미터 조회] - start");
        String username = request.getParameter("username");
        String age = request.getParameter("age");
        System.out.println("username = " + username);
        System.out.println("age = " + age);
        System.out.println("[단일 파라미터 조회] - end");
    }
}

3. 이름이 같은 복수 파라미터 조회

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

 

@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("[복수 파라미터 조회] - start");
        String[] usernames = request.getParameterValues("username");
        Arrays.stream(usernames).forEach(name -> System.out.println("username = " + name));
        System.out.println("[복수 파라미터 조회] - end");
    }
}

HTTP 요청 데이터 - POST HTML Form 

POST 방식으로 요청하기 위해 form 태그를 작성한다.

<form action="/request-param" method="post">
    username: <input type="text" name="username" /> age: <input type="text" name="age" /> <button type="submit">전송</button>
</form>

작성된 form 태그 이용

// 찍힌 로그
Received [POST /request-param HTTP/1.1
Host: localhost:8080
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15
Referer: http://localhost:8080/basic/hello-form.html
Content-Length: 62
Accept-Language: ko-kr

username=%EB%A3%A8%ED%94%84-%EC%8A%A4%ED%84%B0%EB%94%94&age=20

GET 방식은 url에 파라미터를 붙이기 때문에 메시지 바디가 없어 content-type이 없지만

POST 방식은 메시지 바디에 데이터를 포함시키기 때문에 content-type : application/x-www-form-urlencoded 이 존재한다. 

클라이언트 입장에서는 GET, POST 두 방식에 차이가 있지만, 서버 입장에서는 동일하므로 HttpServletRequest로 편리하게 조회할 수 있다. 

 

Postman 사용

테스트를 위해 html 파일과 form 태그를 매번 작성하기 힘들 땐 포스트맨을 사용하자.

웹이나 포스트맨이나 HTTP 메시지는 서로 동일하게 만들어준다.

간단하게 확인할 수 있다.

 

'교육 및 인강 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글

서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON  (0) 2021.06.28
서블릿(Servlet) - API 메시지 바디 : 단순 텍스트, JSON  (0) 2021.06.28
서블릿(Servlet) - 서블릿 환경 구성, HttpServletRequest 개요와 기본 사용법  (0) 2021.06.25
웹 애플리케이션 이해 - HTML, HTTP API, CSR, SSR, 자바 백엔드 웹 기술 역사  (0) 2021.06.25
웹 애플리케이션 이해 - WS, WAS, Servlet, 멀티 쓰레드  (0) 2021.06.25
'교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
  • 서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON
  • 서블릿(Servlet) - API 메시지 바디 : 단순 텍스트, JSON
  • 서블릿(Servlet) - 서블릿 환경 구성, HttpServletRequest 개요와 기본 사용법
  • 웹 애플리케이션 이해 - HTML, HTTP API, CSR, SSR, 자바 백엔드 웹 기술 역사
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    모든 개발자를 위한 HTTP 웹 기본 지식
    ATDD
    엔터프라이즈 애플리케이션 아키텍처 패턴
    조영호
    study
    현실세상의 TDD
    테스트 주도 개발
    Test Driven Development
    소프트웨어 장인
    스프링
    스터디
    마틴 파울러
    자바
    이규원
    백기선
    java
    Patterns of Enterprise Application Architecture
    DDD 세레나데
    객체지향
    오브젝트
    인프라공방
    넥스트스탭
    fastcampus
    JUnit
    추상화
    nextstep
    장인정신
    김영한
    인프런
    TDD
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
서블릿(Servlet) - HTTP 요청 데이터 : 개요, GET 쿼리 파라미터, POST HTML Form
상단으로

티스토리툴바