서블릿 - HttpServletRequest

alsry922·2022년 12월 7일
0

springmvc1

목록 보기
2/5

📒HttpServletRequest

✔️HttpServletRequest 역할

HTTP 요청 메세지를 직접 파싱하기에는 너무 불편하다.

서블릿이 HTTP 요청메시지를 파싱하고 그 결과를 HttpServletRequest 객체에 담아서 제공한다.

HttpServletRequest 객체를 다음과 같이 활용 가능하다.

📌🌟HTTP 요청 메세지 정보 조회 기능

  • START LINE
    • HTTP 메소드
    • URL
    • 쿼리 스트링
    • 스키마, 프로토콜
  • 헤더
    • 헤더 정보
  • 바디
    • form(xxxurlencoded) 데이터 조회
    • message body 데이터 직접 조회

📌임시 저장소 기능

HttpServletRequest 객체는 요청이 오고 응답이 나갈 때까지가 생명주기다.
HTTP 요청 시작부터 끝날 때까지 유지되는 임시 저장소 기능을 제공한다.
request.setAttribute(name, value)
request.getAttribute(name)

📌세션 관리 기능

request.getSession()

✔️HttpServletRequest를 이용해 HTTP 요청 데이터 사용하기

클라이언트에서 HTTP 요청 메세지를 통해서 데이터를 서버로 보내는 방법은 주로 3가지가 있다.

  • GET 요청 - 쿼리 파라미터
    • 검색, 필터, 페이징 등에서 많이 사용
  • POST 요청 - HTML Form을 통해 데이터 전송
    • content-type: application/x-www-form-urlencoded
  • HTTP message body에 데이터를 담아서 요청
    • POST, PUT, PATCH 요청에 사용
    • REST API에서 주로 사용, JSON 형식 데이터를 주로 사용

📌HttpServletRequest를 이용해 쿼리 파라미터 조회하기

String username = request.getParameter("username"); 
//단일 파라미터 조회

Enumeration<String> parameterNames = request.getParameterNames(); 
//파라미터 이름들 모두 조회

Map<String, String[]> parameterMap = request.getParameterMap(); 
//파라미터를 Map으로 조회

String[] usernames = request.getParameterValues("username"); 
//복수 파라미터 조회

⚠️참고 동일한 파라미터를 여러 번 사용 가능
?username=hello&username=spring
이렇게 중복일 때는 복수 파라미터 조회를 하지 않고 단일 파라미터 조회를 할 때 첫 번째 파라미터 값이 나온다.

📌HttpServletRequest를 이용하여 HTML form POST 요청으로 온 message body 데이터 조회하기

content-type: application:x-www-form-urlencoded
클라이언트에서 메세지 바디에 쿼리 파라미터 형식으로 데이터를 전달한다
쿼리 파라미터 조회 방식과 똑같은 방식으로 조회 가능
(파라미터 조회 메서드 그대로 사용 가능, 데이터 형식이 동일해서 가능하다)

html form 엘리먼트에서 submit이 일어나면
content-type: application:x-www-form-urlencoded
메세지 바디는 쿼리 파라미터 형식(ex. username=spring&age=20)으로 작성하여 POST 요청을 서버로 보낸다.

📌🌟HttpServletRequest를 이용하여 API 요청을 통해 온 HTTP message body 데이터 조회하기 - 단순 텍스트

InputStream을 사용해서 HTTP message body 데이터를 직접 읽을 수 있다.
지금은 content-type: text/plain으로 설정해서 postman을 통해 요청을 전송

ServletInputStream inputStream = request.getInputStream();

String messageBody = StreamUtils.copyToString(inputStream,
StandardCharsets.UTF_8);

📌🌟HttpServletRequest를 이용하여 API 요청을 통해 온 HTTP message body 데이터 조회하기 - JSON

앞에서는 단순 텍스트를 message body에 담아서 넘겼지만
이번에는 JSON 문자열을 message body에 담아서 서버에 요청한다.
content-type: application/json

HelloData helloData = objectMapper.readValue(messageBody,
HelloData.class);

앞에서처럼 message body 데이터를 직접 읽은 작업 후에, json 문자열을 자바 객체로 변환하기 위해 Jackson 라이브러리(ObjectMapper) 사용
Gson 을 사용해도 된다. 스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리를 제공한다.

0개의 댓글