HttpServletResponse는 서버에서 클라이언트로 전달하고자 하는 응답 메시지를 작성하기 위한 기능들을 제공하는 객체이다. 기본적으로 HTTP 응답코드 지정, 헤더, 바디 생성 기능을 해준다. 또한 편의기능으로 Content-Type 지정, 쿠키 지정, Redirect 기능을 제공한다.
1. 헤더에 정보 담기
헤더
헤더에 정보를 담을 수 있다. .setStatus(), .setHeader() 등을 사용해보자. 응답 결과는 브라우저의 Network 탭에서 확인할 수도 있지만, postman으로 편하게 조회해볼 수도 있다.
HttpServletResponse.SC_OK와 같이 의미를 바로 전달할 수 있는 상수 타입을 사용할 수 있는 것을 확인하자. 그리고 .setHeader()뿐 아니라 setContentType(), setCharacterEncoding() 메서드를 사용할 수도 있다.
맨 아래의 getWriter().println() 부분이 응답 메시지의 body에 담을 정보를 적을 수 있는 부분이다.
java/hello/servlet/basic/response/ResponseHeaderServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
@WebServlet(name = "ResponseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.setStatus(200);
//그냥 200이라는 숫자가 아니라 OK라는 의미를 바로 확인할 수 있으므로 이렇게 사용한다.
System.out.println("[status-line]");
response.setStatus(HttpServletResponse.SC_OK);
System.out.println("[response-header]");
response.setHeader("Content-Type", "text/plain;charset=utf-8");
//response.setContentType("Content-Type", "text/plain;charset=utf-8");
//reponse.setCharacterEncoding("utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");
//쿠키
// response.setHeader("Set-Cookie", "saltCookie=delicious; Max-Age=600");
Cookie cookie = new Cookie("saltCookie", "delicious");
cookie.setMaxAge(600);
response.addCookie(cookie);
//redirect
// response.setStatus(HttpServletResponse.SC_FOUND); //302
// response.setHeader("Location", "/basic/hello-form.html");
response.sendRedirect("/basic/hello-form.html");
response.getWriter().println("ok");
}
}
|
cs |
쿠키
쿠키도 유사한 방식으로 지정할 수 있다. .setHeader를 통해서 쿠키 값을 넣어줄 수도 있다.
java/hello/servlet/basic/response/ResponseHeaderServlet.java - 쿠키 부분
1
2
3
4
5
|
//쿠키
// response.setHeader("Set-Cookie", "saltCookie=delicious; Max-Age=600");
Cookie cookie = new Cookie("saltCookie", "delicious");
cookie.setMaxAge(600);
response.addCookie(cookie);
|
cs |
리다이렉트
snedRedirect() 메서드를 사용하면 된다. 파라미터로는 리다이렉트가 필요한 주소를 넣어준다. 쿠키와 비슷하게, setStatus(), setHeader() 메서드를 사용해도 적용이 가능하다. 개발자 도구의 네트워크 탭에서 리다이렉트된 것을 확인할 수 있다.
java/hello/servlet/basic/response/ResponseHeaderServlet.java - 리다이렉트 부분
1
2
3
4
|
//redirect
// response.setStatus(HttpServletResponse.SC_FOUND); //302
// response.setHeader("Location", "/basic/hello-form.html");
response.sendRedirect("/basic/hello-form.html");
|
cs |
2. 텍스트, HTML 및 JSON 데이터 정보 담기
text/html
일반 text 및 html은 reponse.getWriter() 에 담아서 보내면 된다.
java/hello/servlet/basic/response/ResponseHtmlServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@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>");
}
}
|
cs |
JSON
json도 유사하다. 다만, 자바 Object 객체를 json 데이터로 바꾸기 위해서 jackson 라이브러리의 ObjectMapper를 이용한다. ObjectMapper.writeValueAsString() 메서드를 이용하면 객체의 정보를 json 데이터로 바꿔줄 수 있다.
java/hello/servlet/basic/response/ResponseJsonServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@WebServlet(name = "ResponseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-type
response.setContentType("application/json");
// response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setUsername("bravo");
helloData.setAge(123);
String json = objectMapper.writeValueAsString(helloData);
response.getWriter().write(json);
}
}
|
cs |
참조
1. 인프런_스프링 MVC 1편 - 백엔드 웹개발 핵심 기술_김영한 님 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'Programming-[Backend] > Spring' 카테고리의 다른 글
[스프링 웹MVC] 6. MVC 패턴 적용 (0) | 2021.07.25 |
---|---|
[스프링 웹MVC] 5. 서블릿, JSP 로 회원관리 웹앱 만들기 (0) | 2021.07.24 |
[스프링 웹MVC] 3. HTTP 요청 정보 : 서블릿 - HttpServletRequest (0) | 2021.07.18 |
[스프링 웹MVC] 2. 프로젝트 생성과 웹서블릿 기본 개념 (0) | 2021.07.18 |
[스프링 웹MVC] 1. 웹 애플리케이션 이해 (0) | 2021.07.17 |