본문 바로가기
스프링/스프링 웹

[Spring] HTTP 요청 데이터 종류 및 GET 쿼리 파라미터

by drCode 2023. 5. 17.
728x90
반응형

HTTP 요청 메시지를 통해서 클라이언트에서 서버로 데이터를 전달하는 방법의 종류가 있다.

 

주로 3가지 방법을 사용한다.

 

(1) GET -  쿼리 파라미터

    - /url?username=hello&age=20

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

    - 예) 검색, 필터, 페이징 등에서 많이 사용하는 방식

(2) POST - HTML Form

    - content-type : application/x-www-form-urlencoded

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

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

(3) HTTP message body에 데이터를 직접 담아서 요청

   - HTTP API에서 주로 사용, JSON, XML, TEXT

  

데이터 형식은 주로 JSON을 사용하고, JSON은 POST, PUT, PATCH 등의 방식으로 사용이 가능하다

 

POST-HTML Form 예시

POST-HTML Form 예시

 

 

GET  쿼리 파라미터

 

GET 쿼리 파라미터를 이용하여 데이터를 전달해볼건데, username=hello&age=20 이 내용을 전달해볼 것이다.

 

메시지 바디 없이, URL의 쿼리 파라미터를 사용해서 데이터를 전달할 것이다.

예) 검색, 필터, 페이징 등에서 많이 사용하는 방식

 

쿼리 파라미터는 URL에 다음과 같이  "?" 를 시작으로 보낼 수 있다. 추가 파라미터는 "&"로 구분하면 된다.

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

 

서버에서는 HttpServletRequest 가 제공하는 다음 메서드를 통해 쿼리 파라미터를 편리하게 조회할 수 있다.

 

쿼리 파라미터 조회 메서드

String username = request.getParameter("username"); //단일 파라미터 조회

Enumeration<String> parameterNames = request.getParameterNames(); //파라미터 이름들 모두 조회

Map<String, String[]> parameterMap = request.getParameterMap(); //파라미터를 Map으로 조회

String[] usernames = request.getParameterValues("username"); //복수 파라미터 조회

 

RequestParamServlet.java

package helloMVC.servlet.basic.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
*  1. 파라미터 전송 기능
 *  http://localhost:8080/request-param?username=hello&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("RequestParamServlet.service");

        System.out.println("[전체 파라미터 조회] - start");
        request.getParameterNames().asIterator()
                        .forEachRemaining(paramName -> System.out.println(paramName + " = " + request.getParameter(paramName)));
        System.out.println("[전체 파라미터 조회] - end");
        System.out.println();

        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");
        System.out.println();

        // 먼저 넘어온 파라미터 먼저 선점됌
        System.out.println("[이름이 같은 복수 파라미터 조회]");
        String[] names = request.getParameterValues("username");
        for(String name : names) {
            System.out.println("name = " + name);
        }

        response.getWriter().write("ok");
    }
}

 

예시

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

 

콘솔 로그 결과

 

728x90
반응형

댓글