728x90
인프런 김영한 강사님의 스프링MVC 강의를 듣고 학습한 내용을 정리한 게시물입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
지난 게시물에 정리한 request에 이어, 이번에는 response에 대해 정리하려고 한다. 아래는 request 정리 게시글이다.
https://wanna-developer02.tistory.com/159
1. HttpServletResponse
HttpServletResponse은 요청에 대한 응답을 보낼 때 개발자를 위해 여러 기능을 제공한다. HttpServletResponse의 역할은 크게 2가지로 나눌 수 있다.
- HTTP 응답 메시지 생성
- HTTP 응답코드 지정
- 헤더 생성
- 바디 생성
- 편의 기능 제공
- Content-type
- 쿠키
- 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); //200
//[response-headers]
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, mustrevalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header","hello");
//[Header 편의 메서드]
// Content 편의 메소드
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
// 쿠키 편의 메소드
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); //600초
response.addCookie(cookie);
// redirect 편의 메소드
response.sendRedirect("/basic/hello-form.html");
PrintWriter writer = response.getWriter();
writer.println("ok");
}
}
⚙️HTTP 응답 데이터 받아오기
request와 비슷하게 HTTP 응답데이터를 받아오는 형식은 아래와 같다.
- 단순텍스트 응답, HTML
- JSON
✔️ 1. HTTP 응답 데이터 - 단순 텍스트, HTML
HTTP 응답 메시지는 아래와 같은 내용을 담아 전달한다.
- 단순 텍스트 응답
- ex | writer.println("ok");
- HTML 응답
- HTTP API - Message body에 JSON 응답
✔️ 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>안녕?</div>");
writer.println("</body>");
writer.println("</html>");
}
}
단순 텍스트 응답에 사용하는 writer.println()를 이용해 HTML 형식을 작성해 응답한다. 이렇게 반환할 때에는 content-type을 text/html 로 지정해야 한다.
✔️ 2. HTTP 응답 데이터 - API 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.setHeader("content-type", "application/json");
response.setCharacterEncoding("utf-8");
User user = new User();
user.setUsername("gildong");
user.setAge(20);
//{"username":"gildong","age":20}
String result = objectMapper.writeValueAsString(user);
response.getWriter().write(result);
}
}
위 코드 아래쪽처럼 Jackson 라이브러리가 제공하는 objectMapper.writeValuesString() 메소드를 이용해 객체를 JSON 문자로 변경하면 된다. 이때 content-type은 application/json으로 지정한다.