HttpServletResponse의 목표는 HTTP 응답 메시지를 작성하는 것이다. (HTTP 응답 코드 지정, 헤더/바디 생성)
편의 기능도 제공한다. Content-Type, 쿠키, Redirect(번거로운 헤더 작성 해결)
다음 코드는 HttpServletResponse를 위한 Servlet이다. Status Line, Header 등을 설정할 수 있다.
@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);
// [reponse-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", "helloo");
}
}
만약 setStatus를 400번(HttpServletResponse.SC_BAD_REQUEST)으로 설정하면 에러가 발생한다.
# 편의 메서드
setHeader()를 setContentType과 setCharacterEncoding으로 대체할 수 있다.
...
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); //(생략시 자동 생성)
}
}
# Cookie 관련 메서드
...
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);
}
}
# Redirect 관련 메서드
sendRedirect()
...
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");
}
}
응답 데이터
# 개요
1. 단순 텍스트 응답
PrintWriter writer = response.getWriter();
writer.println("ok");
2. HTML 응답
HTTP 응답으로 HTML을 반환할 때는 content-type을 text/html로 지정해야 한다.
3. HTTP API 응답
API를 만들 때 응답 데이터를 JSON 형식으로 보내는 방법.
ObjectMember 객체를 사용하며, 파싱에 사용했던 객체를 새로 생성한 후 값을 채운 다음 writeValueAsString 메서드를 통해 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, utf-8
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
// 파싱 전 객체를 만들고
HelloData helloData = new HelloData();
helloData.setUsername("junn");
helloData.setAge(26);
// {username:"junn", age:"26"}
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
}
}
스프링 MVC를 적용하면 다음과 같이 코드가 간결해진다.
@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 {
HelloData helloData = new HelloData();
helloData.setUsername("junn");
helloData.setAge(26);
return helloData;
}
}
'🌱 Spring > MVC ①' 카테고리의 다른 글
[Spring] 회원 관리 웹 어플리케이션 3 _ JSP (0) | 2023.07.14 |
---|---|
[Spring] 회원 관리 웹 어플리케이션 1 _ Domain/Repo/Test (0) | 2023.07.12 |
[Spring] HTTP 요청 데이터(HttpServletRequest) (0) | 2023.07.12 |
[Spring] HttpServletRequest 기능과 정보 (0) | 2023.07.11 |
[Spring] Servlet 구현 (0) | 2023.07.11 |