http response,request

bo04·2022년 6월 10일
0

spring-mvc1

목록 보기
6/9

http 메시지 구조

http response

get-쿼리 파라미터

  • localhost:8080?username=hello&age=20
  • body없이 url에 쿼리 파라미터에 데이터를 포함해서 전달

post-html form

  • content-type의 x-www-form-urlencoded: html form으로 요청했다
  • body에 쿼리 파라미터 형식으로 데이터 전달됨.(username=kim&age=20)
  • get에서 쿼리 파라미터에 전달되는 모양새와 똑같으므로 get에서 쓰는 쿼리 파라미터 조회 메서드를 그대로 사용하면 됨(request.getParameter(..))

따라서 request.getParameter(..)같은 쿼리 파라미터 관련 메소드는 get방식에서도 지원되고 post html form 방식에서도 동일하게 적용 할 수 있음!
다만 get에서는 http 메시지 body를 사용하지 않기 때문에 content-type이 없고 post html form은 content-type이 함께 보내진다

html form 테스트하기

직접 프론트에서 값을 하나하나 입력해서 하지 말고 postman을 이용하자

html form으로 테스트할때 headers의 content-type이 application/x-www-form-urlencoded인지 확인하자!

http message body

message body는 http api에서 주로 사용하는데 대표적으로 json을 보낼때 사용함

단순 텍스트로 받기

여기서는 request 요청을 보내고 그 요청을 단순 텍스트로 받아서 출력해보겠다

ServletInputStream inputStream = request.getInputStream(); // byte로 받겠다
String messageBody = StreamUtils.copyToString(inputStream,StandardCharsets.UTF_8); // 받은 데이터를 utf-8로 변환하겠다
System.out.println("messageBody = " + messageBody);

postman으로 x-www-form-urlencoded로 보내든지 raw로 값을 보내든지 어떤 형식으로 값을 보내도 다 request.getInputStream()으로 값을 받아서 utf-8로 변환해서 보여줄 수 있음.

request.getParameter(...)는 get방식과 post일때는 x-www-form-urlencoded일때만 받을 수 있으므로 헷갈리지 말자!

json으로 변환하기

json도 단순 텍스트이기 때문에 바로 위에와 똑같이 해도 출력이 되지만 값과 키만 깔끔하게 출력하려면 ObjectMapper클래스를 사용하면 된다.

private ObjectMapper objectMapper = new ObjectMapper(); // json 변환 라이브러리(json 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하는 라이브러리)
 
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class); // utf-8로 변환한 데이터가 json 형식이면 helloData 클래스 포맷으로 변환하겠다

http response

기본적인 사용방법

헤더를 직접 설정해줘야 한다.

response.setStatus(HttpServletResponse.SC_OK); // 200이라고 직접 적기보다는 sc_ok같은 값을 쓰는게 좋음
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.addCookie(cookie);
response.sendRedirect("/basic/hello-form.html");

html 보내기

PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>안녕?</div>");
writer.println("</body>");
writer.println("</html>");

json 보내기

여기서도 json으로 변환해야돼서 ObjectMapper를 사용한다

HelloData data = new HelloData();
data.setUsername("kim");
data.setAge(20);

String result = objectMapper.writeValueAsString(data);
response.getWriter().write(result);

0개의 댓글