작성
·
35
·
수정됨
0
getInputStream()
과 getParameterNames()
를 함께 사용 시, 순서 상 뒤에 있는 메서드에서는 출력이 안되는 상황을 발견했습니다
저의 추측으로는 두 메서드 모두 스트림으로부터 데이터를 싹 가져와서 그런 거 같습니다
테스트 해보니 getParameterValues()
메서드 역시 마찬가지고요
질문1) 우선 상기 추측이 맞나요?
이번에는 getInputStream()
과 getParameter()
를 테스트 해봤습니다
역시나 같은 결과였지만 한 가지 의문이 있습니다
username
과 age
두 가지 데이터에 대해 서버로 보냈을 때
서버 측에서는 getParameter(username)
만 해도 age
에 관해서는 getInputStream()
에서 출력되지 않음을 확인했습니다
질문2) getParameter()
를 최초 실행하게되면 스트림에 있는 데이터를 싹 가져와 특정 컬렉션(Map 일까요?)에 담고 이후부터는 컬렉션에서 바로 찾는 식인가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
조태준님, 두 가지 질문에 대한 답변을 드리겠습니다.
질문1에 대한 답변:
조태준님께서 추측하신 내용이 맞습니다. getInputStream()
과 getParameterNames()
, getParameterValues()
메서드는 모두 같은 입력 스트림을 사용하여 데이터를 읽어오기 때문에, 한번 호출되면 스트림의 데이터를 모두 소모하게 됩니다. 따라서 이후의 다른 메서드를 호출했을 때는 이미 데이터를 모두 읽어서 결과를 가져올 수 없습니다.
질문2에 대한 답변:
네, getParameter()
메서드를 처음 호출하면 요청의 바디를 파싱하여 파라미터들을 Map에 저장하게 됩니다. 그 후에는 데이터가 저장된 Map에서 직접 값을 조회하게 됩니다. 따라서 getParameter()
를 호출하면 getInputStream()
에서 데이터를 더 이상 읽을 수 없는 상황이 발생하는 것입니다.
추가적으로 관련 링크를 통해 보다 자세한 내용을 확인하실 수 있습니다.
인프런 강의 질문 답변 보기
질문이 해결되셨길 바랍니다!