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 예시
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
'스프링 > 스프링 웹' 카테고리의 다른 글
[Spring] HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트 - inputStream (0) | 2023.05.17 |
---|---|
[Spring] HTTP 요청 데이터 - POST HTML Form (0) | 2023.05.17 |
[Spring] HttpServletRequest 개요 및 기본 사용 (0) | 2023.05.17 |
[Spring] 서블릿(Servlet) 만들기 (0) | 2023.05.16 |
[Spring] 서블릿(Servlet) 프로젝트 환경 설정 (IntelliJ) (0) | 2023.05.16 |
댓글