HTTP message body에 데이터를 직접 담아서 요청
먼저 가장 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고 읽어보자!
HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다.
RequestBodyStringServlet
package hello.servlet.basic.request;
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 = "requestBodyStringServlet", urlPatterns = "/request-bodystring")
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);
System.out.println("messageBody = " + messageBody);
response.getWriter().write("ok");
}
}
ServletInputStream inputStream = request.getInputStream();
이렇게 하면 메시지 바디의 내용을 바이트 코드로 얻을 수 있다.
그 다음 바이트 코드를 스트링으로 바꿔야한다!!
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
스프링이 제공하는 유틸리티 클래스를 사용하고 꺼내줄때 인코딩 정보를 꼭 알려줘야한다. 바이트를 문자로 변환할 때는 어떤 인코딩인지 반대로 문자를 바이트로 바꿔줄때도 어떤 인코딩인지 알려줘야한다!!
지금은 대부분 UTF-8을 사용한다.
사실 위 내용대로 문자로 주고받는 방식은 잘 사용하지않고 JSON형식으로 주고받으니 참고정도 하자!!
참고
inputStream은 byte 코드를 반환한다 . byte 코드를 우리가 읽을 수 있는 문자 즉 String으로 보려면 문자표를 지정해주어야 한다. 위 내용처럼 UTF_8 Charset을 지정해주면 된다!
문자전송