서블릿에서 원하는 HTTP 응답을 보내기 위해서는 HttpServletResponse 을 설정하면 된다.
TMI ✨
이렇게 서블릿 중에서도 HTTP 요청과 응답을 다루는 서블릿을 HTTP servlet 이라고 부른다.
서블릿은 웹 서버에서 동작하는 작은 자바 프로그램이다. 서블릿은 웹 클라이언트로부터 요청을 받고, 이에 응답하는데 다들 알다시피 일반적으로 HTTP 요청/응답을 처리하는데 사용된다.
1. setContentType()을 통해 응답할 response의 content type을 정해주자. 이때 옵션으로 인코딩 방식도 정해줄 수 있다.
res.setContentType("text/html;ISO-88859-4");
2. 응답 헤더를 지정하자. setHeader()를 이용하면 된다.
res.setHeader("Pragma", "no-cache");
3. 버퍼에 응답 body 내용을 써주자.
→ 응답할 바디의 MIME TYPE에 따라 getWriter() 또는 getOutputStream()을 호출한 뒤, 얻어진 객체의 메소드를 이용하면 버퍼에 응답할 내용을 쓸 수 있다.
MIME TYPE: Content-Type 헤더에서 지정해준 타입. ex) applicaton/json
→ output stream은 서블릿의 메서드인 service()의 response 파라미터 (HttpServletResponse res)를 이용해서 얻을 수 있다.
//character data를 전송하는 경우
PrintWriter out = res.getWriter();
// binary data, mixed data like binary + text 를 전송하는 경우
ServletOutputStream out = res.getOutputStream();
➕PrintWriter ,ServletOutputStream 모두 같은 buffer에 결과물을 쓰게 된다!
write() - writes the specified byte to the output stream
write(byte[] array) - writes the bytes from the specified array to the output stream
flush() - forces to write all data present in output stream to the destination
close() - closes the output stream
4. OutputStream.close() 또는 OutputStream.flush()를 호출하여 응답 구성을 마무리 짓자. 서블릿 컨테이너가 이를 이용하여 HTTP 응답 메시지를 전송할 것이다. (해당 상황에서 개발자가 직접 close 혹은 flush 메소드를 호출하는 것은 되도록 피하자)
OutputStream flush vs close
reference
https://docs.oracle.com/cd/E13222_01/wls/docs81/servlet/progtasks.html
'Spring' 카테고리의 다른 글
@ResponseBody를 이용한 응답 과정 알아보기 (0) | 2024.09.13 |
---|---|
HttpServletResponse와 HttpOutputMessage (0) | 2024.09.11 |
영속성 관리(ORM 표준 기술 {3} ) (0) | 2023.07.06 |
JPA(자바 ORM 표준 JPA 프로그래밍-기본편) { 2 } (0) | 2023.07.05 |
JPA(자바 ORM 표준 JPA 프로그래밍-기본편) { 1 } (0) | 2023.07.05 |