HTTP 요청 데이터는
- 쿼리파라미터
- HTML Form
- HTTP API
세가지로 나누어 진다.
쿼리파라미터
쿼리파라미터는 request.getParameterNames() 로 쉽게 받을 수 있다.
RequestParamServlet.class
package hello.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://127.0.0.1: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("[전체 파라미터 조회] - start");
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> System.out.println(paramName + " = " + request.getParameter(paramName)));
System.out.println("[전체 파라미터 조회] - end");
System.out.println();
System.out.println("[단일 파라미터 조회]");
String username = request.getParameter("username");
String age = request.getParameter("age");
System.out.println("username = " + username);
System.out.println("age = " + age);
System.out.println();
System.out.println("[이름이 같은 복수 파라미터 조회]");
String[] usernames = request.getParameterValues("username");
for (String s : usernames) {
System.out.println("s = " + s);
}
response.getWriter().write("ok");
}
}
postman 데이터 전송
http://127.0.0.1:8080/request-param?username=hello&age=20
를 주소창에 치는것과 같다.
결과
<log>
HTML 폼
도 request.getParameterNames() 로 파라미터 정보를 쉽게 받을 수 있다.
HTTP API (JSON)
- http body의 데이터가 바이트코드로 되어있기 때문에 request.getInputStream(); 으로 받아온다.
- java의StreamUtils를 이용해 메시지 바디로 가져온다.String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
- Jackson Library ObjectMapper를 이용해서 JSON 을 파싱한다.
package hello.servlet.basic.request;
import com.fasterxml.jackson.databind.ObjectMapper;
import hello.servlet.basic.HelloData;
import org.springframework.util.StreamUtils;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@WebServlet(name = "RequestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
System.out.println("helloData.getUsername() = " + helloData.getUsername());
System.out.println("helloData.getAge() = " + helloData.getAge());
response.getWriter().write("ok");
}
}
POSTMAN
결과
'Web > MVC' 카테고리의 다른 글
EP5. Spring MVC 기본 기능 (요청 매핑) (0) | 2021.03.25 |
---|---|
EP4. 스프링 MVC 구조 (0) | 2021.03.25 |
EP4. MVC 패턴 (0) | 2021.03.22 |
EP3. 서블릿객체만을 이용해 HTTP 응답 메시지 작성하기 (0) | 2021.03.18 |
EP1. WAS, 서블릿, 멀티쓰레드 (0) | 2021.03.17 |