HTTP 응답 메세지는 주로 다음 내용을 담아서 전달한다
- 단순 텍스트 응답
- writer.println("ok");
- HTML 응답
- HTTP API - MessageBody JSON 응답
HTML 응답
@WebServlet(name="responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type: text/html; charset=utf-8
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>하이!</div>");
writer.println("</body>");
writer.println("</html>");
}
}
- HTTP 응답으로 HTML을 반환하는 content-type을 text/html로 지정해야 한다.
결과
API JSON 응답
@WebServlet(name="responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type : application/json
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setUsername("rosieposie");
helloData.setAge(22);
// {"username":"rosieposie", "age":22}
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
}
}
- HTTP 응답으로 JSON을 반환할 때는 content-type을 application/json 으로 지정해야 한다.
- Jackson 라이브러리가 제공하는 objectMapper.writeValueAsString()을 사용하면 객체를 JSON 문자로 변경할 수 있다
** application/json은 스펙상 utf-8 형식을 사용하도록 정의되어 있다. 그래서 스펙이서 charset=utf-8과 같은 추가 파라미터를 지원하지 않는다. 따라서 application/json이라고만 사용해야지 application/json;charset=utf-8이라고 전달하는 것은 의미없는 파라미터를 추가한 것이 된다. response.getWriter()를 사용하면 추가 파라미터를 자동으로 추가해버린다. 이때는 response.getOutputStream()으로 출력하면 그런 문제가 없다.
결과
드디어 이렇게 HTTP 요청, 응답 데이터를 살펴보았다. 실무에서는 주로 json을 사용해서 당연스럽게도 네트워크 응답헤더의 컨텐트타입을 굳이 찾아보진 않았다. 그래서 오늘은 업무할 때 네트워크도 까봤다. 알고보니까 주시하면서 찾아보니까 재밌었당 ㅋ0ㅋ 그나저나 저 응답헤더의 Keep-Alive 눈에 익는다 했더니 에러일지에 작성했던 구글링해서 찾은 해결방안 중 하나였던 것... 재밌다,, 이런 유기적인 구조. 그럼 다시 Keep-Alive 검색하러 가본다!!!
@ 스프링 MVC 1편 - 백엔드 웹개발 by 김영한을 참조하고 있습니다.
'Spring > mvc' 카테고리의 다른 글
[Spring MVC 1] - 회원 관리 웹 어플리케이션 JSP로 구현 (0) | 2022.08.12 |
---|---|
[Spring MVC 1] - 회원 관리 웹 어플리케이션 Servlet으로 구현 (0) | 2022.08.11 |
[Spring MVC 1] - HttpServletResponse (0) | 2022.08.09 |
[Spring MVC 1] - HTTP 요청 데이터 (0) | 2022.08.07 |
[Spring MVC 1] - HttpServletRequest (0) | 2022.08.01 |