서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON
인프런 김영한 님의 스프링 강의이며, 섹션 2 - 서블릿(Servlet)를 정리한다.
실습형 교육으로 자세한 설명이 궁금하면 수강을 권장한다. (실습은 모두 옛날 방식이며, 현재는 좀 더 편하게 사용한다.)
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원
www.inflearn.com
HttpServletResponse - 기본 사용법
HttpServletResponse의 역할
- HTTP 응답 메시지 생성
- 응답 코드 지정 (200, 300, 400, 500 등)
- 바디 생성 가능
- 여러 편의 기능 제공 (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-headers]
response.setHeader("Content-type", "text/plain");
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");
}
}
http://localhost:8080/response-header 이동하고 개발자 도구로 확인해보자.
코드에서 작성한 my-header, Pragma 등이 지정한 값으로 나왔다.
setHeader(key, value)로 지정하는게 너무 반복되어 편의성으로 제공하는 기능들이 존재한다
// 헤더 편의성
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
// 쿠기 편의성
// response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); //600초
response.addCookie(cookie);
// redirect 편의성
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 응답 데이터 - 단순 텍스트, HTML
* 이전까지 단순 텍스트는 진행해온 관계로 생략한다.
HTML 응답
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>안녕하세요?</div>");
writer.println("</body>");
writer.println("</html>");
}
}
실행하고 페이지 소스보기를 사용하자
HTTP 응답 데이터 - API JSON
JSON 응답
JSON을 반환할 때는 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 {
//Content-type : application/json;charset=utf-8
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setAge(20);
helloData.setUsername("loop-study");
// {"username":"loop-study", "age":20}
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
}
}