HttpServletResponse와 HTTP 응답 데이터

스프링 MVC 1편 강의 정리

HttpServletResponse 역할

  • HTTP 응답 메세지 생성
  • HTTP 응답 코드 지정
  • header, body 생성
  • 편의 기능 제공
    • Content-Type,
    • Cookie
    • redirect
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// status line
		response.setStatus(HttpServletResponse.SC_OK);

		// response header
		// response.setHeader("Content-Type", "text/plain;charset=utf-8");

		// 캐시 적용하지 않도록 설정
		response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
		response.setHeader("Pragma", "no-cache");

		// custom header
		response.setHeader("my-header", "hello");

		// header 편의 메서드
		content(response);
    
    // cookie 편의 메서드
		cookie(response);

    // message body
		PrintWriter writer = response.getWriter();
		writer.println("OK 완료");
	}

	private void content(HttpServletResponse response) {
		response.setContentType("text/plain");
		response.setCharacterEncoding("utf-8");
		// response.setContentLength(11);	// 생략시, 자동 완성
	}
  
  private void cookie(HttpServletResponse response) {
		Cookie cookie = new Cookie("myCookie", "good");
		cookie.setMaxAge(60);
		response.addCookie(cookie);
	}
  
  private void redirect(HttpServletResponse response) throws IOException {
		// response.setStatus(HttpServletResponse.SC_FOUND);
		// response.setHeader("Location", "/basic/hello-form.html");

		response.sendRedirect("/basic/hello-form.html");
	}
}

HTTP 응답 데이터 - text, HTML

  • 단순 텍스트: writer.println("OK");
  • HTML 응답
  • HTTP API - message body JSON 응답
  • 응답값으로 HTML 반환할 때는 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 {
		// 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>Hi!</div>");
		writer.println("</body>");
		writer.println("</html>");
	}
}

HTTP 응답 데이터 - 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("jaejae");
		helloData.setAge(34);

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