WAS에 Http URL 요청이 발생하면, Spring에서는 Servlet을 통해 해당 요청을 처리할 수 있었다.
Spring에서는 Http 요청 인입시, Request 메시지를 기반으로 HttpServletRequest, HttpServletResponse 객체를 생성해준다.
@WebServlet의 urlPatterns를 기준으로 Servlet 객체를 생성한다.
Servlet 객체에 HttpServletRequest/Response 객체를 넘겨준다.
Servlet 객체 내에 정의된 비지니스 로직을 수행한다.
HttpResponseServlet을 사용하여 Http Response 메시지를 생성/응답한다.
지난 시리즈에서는 인입되는 요청들이 어떤 형식으로 데이터를 담고있느냐에 따라서 Spring에서 데이터를 넘겨받아 처리하는 과정, 즉 HttpServletRequest를 사용하는 방법을 서술했다.
이번 포스트에서는 HttpServletResponse를 사용하는 방법에 대해 서술한다.
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// [status-line]
resp.setStatus(HttpServletResponse.SC_OK);
PrintWriter writer = resp.getWriter();
writer.println("안녕하세요");
}
}
HttpServletResponse객체의 getWriter()를 통해 텍스트 정보 기입
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("application/json");
TestModel testModel = new TestModel();
testModel.setUsername("hans");
testModel.setNumber(34);
String result = objectMapper.writeValueAsString(helloData);
resp.getOutputStream().print(result);
}
}
application/json은 utf-8이 스펙상 지정되어 있어 Response Header Content-Type에 charset을 추가해줄 필요가 없다.
HttpServletResponse.getWriter() 사용시 자동으로 chatset 파라미터가 추가되니, HttpServletResponse.getOutputStream()로 출력해야 한다.