말하는 감자

[스프링부트 스터디] 서블릿 (3) - HttpServletResponse 본문

Backend

[스프링부트 스터디] 서블릿 (3) - HttpServletResponse

개똥벌레25 2021. 7. 25. 13:22
728x90

HttpServletResponse 기본 사용법

- 응답 메시지 생성: HTTP 응답코드 지정, 헤더 생성, 바디 생성

//[status-line]
response.setStatus(HttpServletResponse.SC_OK); 
	//200, 숫자로 적기보다는 응답코드의 의미를 알 수 있도록

//[response-headers]
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");

 //[message body]
PrintWriter writer = response.getWriter();
writer.print("ok");

- 편의기능: content-type, 쿠키, redirect

private void content(HttpServletResponse response) {
        //Content-Type: text/plain;charset=utf-8
        //Content-Length: 2
        //response.setHeader("Content-Type", "text/plain;charset=utf-8");
        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        //response.setContentLength(2); //(생략시 자동 계산)
}

private void cookie(HttpServletResponse response) {
        //Set-Cookie: myCookie=good; Max-Age=600;
        //response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
        Cookie cookie = new Cookie("myCookie", "good");
        cookie.setMaxAge(600); //600초 유효
        response.addCookie(cookie);
}

private void redirect(HttpServletResponse response) throws IOException {
        //Status Code 302
        //Location: /basic/hello-form.html
        //response.setStatus(HttpServletResponse.SC_FOUND); //302
        //response.setHeader("Location", "/basic/hello-form.html");
        response.sendRedirect("/basic/hello-form.html");
}

 

Http 응답 데이터

응답 방식에 세 가지가 있다.

1. 단순 텍스트 응답

2. HTML 응답

3. HTTP API - MessageBody JSON 응답

1. 단순 텍스트 응답

PrintWriter writer = response.getWriter();
writer.print("ok");

2. HTML 응답

- content type을 text/html로 설정

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

3. HTTP API - MessageBody JSON 응답

- content type을 application/json 으로 설정

- jackson 라이브러리의 writeValueAsString 메서드를 사용해 문자열로 바꿀 수 있다.

//Content-Type: application/json
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");

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

//페이지에 {"username":"kim", "age":20} 로 출력됨
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);

 

Comments