본문 바로가기
Spring/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

HttpServletResponse 사용하기

by hk27 2022. 1. 19.
HTTP 응답 메시지는 어떻게 만들까요?

안녕하세요.

 

앞서 HttpServletRequest 객체를 사용해서 요청 메시지를 조회하고(https://passionate.tistory.com/34), 요청 데이터를 조회하는(https://passionate.tistory.com/35) 방법을 알아보았습니다.

 

오늘은 HttpServletResponse 객체를 사용해서 HTTP 응답 메시지를 생성하고 데이터를 전송하는 방법을 알아보겠습니다.

Response는 Request보다 간단해서, 한 게시글에 모아서 작성하겠습니다.

 

 

HTTP 응답 메시지 생성

HttpServletRespose 객체로 상태 코드를 지정하고  헤더 값을 설정할 수 있습니다.

@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setStatus(HttpServletResponse.SC_OK); // 상태코드 200

        response.setHeader("Content-Type", "text/plain;charset=utf-8");
        response.setHeader("Cache-Control", "no cache, no store, must-revalidate");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("my-header", "hello");
        
        PrintWriter writer = response.getWriter();
        writer.println("ok");
    }
}

setStatus() 메소드로 상태 코드를 지정하고, setHeader로 헤더 값을 추가하고, writer에 내용을 작성해서 데이터를 전송할 수 있습니다.

 

설정한 URL에 들어가면 상태 코드와 헤더가 잘 지정되고, 데이터가 잘 전송되는 것을 확인할 수 있습니다. 

 

 

HTTP 응답 데이터 전달

HTTP 응답 메시지는 다음과 같은 데이터를 바디에 담아서 전달합니다.

1. 단순 텍스트 응답: writer.println("ok")로 간단하게 전송할 수 있습니다.

2. HTML 응답

3. HTTP API - JSON 응답

 

2, 3번을 어떻게 하는지 알아봅시다.

 

HTML 응답

HTML은 단순 텍스트 응답처럼 writer.println() 으로 데이터를 전송합니다.

그러나 유의할 점은, content-type을 text/html로 지정해야 합니다.

예시 코드는 아래와 같습니다.

@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        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>");

    }
}

 

URL에 들어가면, html이 잘 렌더링 된 것을 확인할 수 있습니다.

라고 잘 출력되는 것을 확인할 수 있습니다.

 

 

API JSON 응답

다음으로 JSON 데이터를 응답하는 방법을 알아보겠습니다.

https://passionate.tistory.com/35에서 API JSON 데이터를 받는 방법을 알아보면서 ObjectMapper를 학습하였습니다.

ObjectMapper는 JSON을 객체로, 객체를 JSON으로 변환합니다.

JSON을 객체로 변환하는 것은 readValue() 였습니다.

오늘은 객체를 JSON으로 변환하는 writeValueAsString()을 사용해보겠습니다.

 

data라는 객체가 있고 필드 username의 값으로 kim을, age의 값으로 20을 가진다고 생각해봅시다.

이 객체를 json 형태인 {"username" = "kim", "age"= 20}으로 변환해서 유저에게 제공하는 것은 번거로울 것입니다.

이 과정을 처리해주는 것이 ObjectMapper입니다.

objectMapper.writeValueAsString()을 사용하면 객체를 JSON 문자로 변경할 수 있습니다.

 

그리고 위에서 HTML Form을 전송할 때와 같이, 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 request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");

        HelloData data = new HelloData();
        data.setUsername("kim");
        data.setAge(20);

        String result = objectMapper.writeValueAsString(data);
        response.getWriter().write(result);
    }
}

 

 

URL에 접속해서 결과를 확인하면 JSON 데이터가 잘 전송되는 것을 확인할 수 있습니다. 

 

 

 

 

 

인프런  '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 듣고 공부하며 정리한 자료입니다. 

잘못된 부분은 피드백 주시면 감사하겠습니다. 

글 읽어주셔서 감사합니다 :-)

 

참고자료

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술, 섹션 2. 서블릿 https://www.inflearn.com/course/스프링-mvc-1

 

댓글