HttpServletResponse 사용법

Hansu Kim·2022년 4월 10일
3

Spring MVC

목록 보기
3/6

WAS에 Http URL 요청이 발생하면, Spring에서는 Servlet을 통해 해당 요청을 처리할 수 있었다.

  1. Spring에서는 Http 요청 인입시, Request 메시지를 기반으로 HttpServletRequest, HttpServletResponse 객체를 생성해준다.

  2. @WebServlet의 urlPatterns를 기준으로 Servlet 객체를 생성한다.

  3. Servlet 객체에 HttpServletRequest/Response 객체를 넘겨준다.

  4. Servlet 객체 내에 정의된 비지니스 로직을 수행한다.

  5. HttpResponseServlet을 사용하여 Http Response 메시지를 생성/응답한다.

지난 시리즈에서는 인입되는 요청들이 어떤 형식으로 데이터를 담고있느냐에 따라서 Spring에서 데이터를 넘겨받아 처리하는 과정, 즉 HttpServletRequest를 사용하는 방법을 서술했다.

이번 포스트에서는 HttpServletResponse를 사용하는 방법에 대해 서술한다.

Response 메시지의 요소

  • Status-line
  • Response-headers
    • content 정보
      • Content-Type, CharacterEncoding, ContentLength 등
    • cookie 정보
      • Key-Value, MaxAge
    • Redirect 정보
      • Status Code를 302일 경우, Header에 Location 키 값으로 Redirecting URL을 정의
      • response.sendRedirect("/redirected-URL.html")
  • Message Body
    • 3가지 방식으로 데이터를 브라우저에 전달
      • 단순 텍스트
      • HTML
      • HTTP API - MessageBody Json

Response Message Body의 데이터 전달 방법

단순 텍스트 데이터

@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()를 통해 텍스트 정보 기입

HTML 응답

  • Response의 content-type을 text/html로 지정해야 한다.
    • resp.setContentType("text/html")

HTTP API - Message Body에 Json 데이터 보내기

  • Response의 content-type을 application/json로 지정
@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()로 출력해야 한다.

0개의 댓글