Programming-[Backend]/Spring

[스프링 웹MVC] 4. HTTP 응답 정보 : 서블릿 - HttpServletResponse

컴퓨터 탐험가 찰리 2021. 7. 19. 17:30
728x90
반응형

 

 

 

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

 

728x90
반응형