오봉이와 함께하는 개발 블로그
스프링 MVC 1 - HTTP 요청 데이터 개요, GET 쿼리 파라미터 본문
728x90
HTTP 요청 데이터 - 개요
HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법을 알아보자.
주로 3가지 방법을 사용한다.
- GET - 쿼리 파라미터
- /url__?username=hello&age=20__
- 메시지 바디 없이 URL의 쿼리 파라미터에 데이터릂 포함해서 전달한다.
- 검색, 필터, 페이징 등에서 많이 사용한다.
- POST - HTML Form
- HTTP 메시지 헤더 content-type에 명시된다.
- content-type: application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파라미터 형식으로 전달
- username=hello&age=20
- 회원 가입, 상품 주문, HTML Form등에서 사용
- HTTP 메시지 헤더 content-type에 명시된다.
- HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용한다.
- JSON, XML,TEXT 등의 형식이 들어간다.
- 데이터 형식은 주로 JSON을 사용한다.
- POST, PUT, PATCH 등의 메서드를 사용할 수 있다.
- HTTP API에서 주로 사용한다.
HTTP 요청 데이터 - GET 쿼리 파라미터
검색, 필터, 페이징 등에서 많이 사용하는 방식이다.
예를 들어 다음 데이터를 클라이언트에서 서버로 전송하자.
단, 메시지 바디 없이 URL 쿼리 파라미터를 사용해서 데이터를 전달하자.
- username=hello
- age=20
쿼리 파라미터는 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"); //복수 파라미터 조회
코드
@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("전체 파라미터 조회 - Start");
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> System.out.println(paramName + " = " + request.getParameter(paramName)));
// request.getParameter(paramName) paramName은 이름을 꺼낸다 (username, age)
// request.getParameter("파라미터 이름")을 작성하면 값을 꺼낼 수 있다.
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("이름이 같은 복수 파라미터 조회 - start");
String[] usernames = request.getParameterValues("username");
for(String name : usernames) {
System.out.println("username = " + name);
}
System.out.println("이름이 같은 복수 파라미터 조회 - end");
}
}
결과
<!-- 결과 -->
전체 파라미터 조회 - Start
username = hello
age = 20
전체 파라미터 조회 - End
단일 파라미터 조회 - start
username = hello
age = 20
단일 파라미터 조회 - end
이름이 같은 복수 파라미터 조회 - start
usernames = hello
usernames = hello2
이름이 같은 복수 파라미터 조회 - end
복수 파라미터에서 단일 파라미터 조회
username=hello&username=kim
과 같이 파라미터 이름은 동일한데 값이 중복되면 어떻게 될까?request.getParameter()
를 사용하면 파라미터 이름에 값이 하나만 있을 때 사용해야 한다.
지금처럼 중복일 때는 request.getParameterValues()
를 사용해야 한다.
값이 중복일 때 request.getParameter()
를 사용하면 request.getParameterValues()
의 첫 번째 값을 반환한다.
중복으로 보내는 경우는 거의 없다.
하지만 중복을 보낼 때는 확실하게 인지하고 사용하도록 하자.
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
'BE > Servlet' 카테고리의 다른 글
스프링 MVC 1 - HTTP 요청 데이터 API 메시지 바디 TEXT, JSON (0) | 2022.08.10 |
---|---|
스프링 MVC 1 - HTTP 요청 데이터 POST HTML Form (0) | 2022.08.10 |
스프링 MVC 1 - HttpServletRequest 개요, 기본 사용법 (0) | 2022.08.09 |
스프링 MVC 1 - 기본 프로젝트 Hello 서블릿 (0) | 2022.08.09 |
스프링 MVC 1 - 멀티 쓰레드 (0) | 2022.08.09 |
Comments