1. GET 쿼리 파라미터
    1. 걍 쿼리스트링으로 url 에 들어온거 백에서 어떻게 조회할지!
    2. ?로 시작, &로 구분

아래 느낌 처럼 HttpServletRequest 덕분에 형식이 정해지니까 메서드로 필요한 쿼리스트링 파라미터들 다 가져올 수가 있네!! 너무 유용하다!!

/**
 * 1. 파라미터 전송 기능
 * <http://localhost:8080/request-param?username=kim&age=20&username=Rho>
 */

@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");
        System.out.println("username = " + username);
        String age = request.getParameter("age");
        System.out.println("age = " + age);

        System.out.println("[이름이 같은 복수 파라미터 조회]");
        String[] usernames = request.getParameterValues("username");
        for (String s : usernames) {
            System.out.println("s = " + s);
        }
    }
}

// <http://localhost:8080/request-param?username=kim&age=20&username=Rho> 출력 결과
[전체 파라미터 조회] - start
username: kim
age: 20
[전체 파라미터 조회] - end

[단일 파라미터 조회]
username = kim
age = 20
[이름이 같은 복수 파라미터 조회]  // 이름 중복되니 value로 뽑는구만~ 근데 파라미터는 중복 안되게끔 이야기 하자~
s = kim
s = Rho

  1. POST - HTML form → 회원가입 폼 같은거로 이렇게 많이 온단다~

아래 사진처럼 HTML form을 이용한 POST은 메시지 바디에 쿼리스트링 형식으로 보낸다!(GET은 URL!) 그래서 똑같이 조회가 가능하다~ 즉, request.getParameter(s) 은 GET URL 방식, POST HTML form(message body) 형식 둘 다 지원! 가져오는 코드는 위와 똑같겟져~

참고로 POST HTML form방식은 헤더에 content type이 반드시 존재해야한다! → 메시지 바디가 존재하니! → 그 내용은 application/x-www-form-unlecorded 라고 한다!

image.png

  1. HTTP 요청 데이터 - API 메시지 바디
    1. HTTP API(Rest) 에서 많이 사용 , POST, PUT, PATCH
    2. message body에 JSON,XML 형식으로 데이터를 담아서 요청! → 많이 하잖냐~
@WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletInputStream inputStream = request.getInputStream();// 바이트 코드로 바로 얻어옴
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);// 자바에서 제공하는 바이트 코드 to string util 클래스
                                                                                // 인코딩 방식 제공해줘야함! UTF_8

        System.out.println("messageBody = " + messageBody);

    }
}

근데 위에 같은 코드는 그냥 메시지 바디에 텍스트 형식으로 있을 경우에 가능한거고 실제로는 JSON, XML 형식으로 많이 요청옴!!!!!

그렇다면 JSON 변환해주는 게 필요하겠죠? 자연스럽게 DTO 개념이 나오네~~