Java Servlet 정리본 _ HttpServletResponse

2021. 12. 24. 23:47·스프링/스프링 MVC

서블릿 응답

  • 클라이언트로 부터 온 요청을 담당하는 서블릿이 request를 처리하고 response를 보낸다. 이 response도 HTTP 프로토콜로서 형식을 만들어줘야 한다.
  • 직접 문자열을 만들어서 반환해도 되지만 상상만해도 머리가 아프다. 이거를 서블릿이 필요한 값만 전달해주면 알아서 응답 메시지로 만들어서 반환해 준다.
  • 응답코드, 응답 형식, 인코딩 설정, 캐시 설정 등을 할 수 있다.

 

응답 헤더 작성

Response 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);

        // response header
        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", "hello");

        // message body
        PrintWriter writer = response.getWriter();
        writer.print("OK");
    }
  • /response-header로 요청이 오면 아래 서블릿이 처리를 하게 된다.
  • 응답 메시지를 만드는 내용이 담겨있다.
    200 OK, Content-Type, Cache-Control, Pragma, 커스텀 헤더(my-header), message-body 등

응답 패킷의 헤더

위와 같이 문자열로 작성해도 된다. 하지만 오타의 위험성이 있고 정확히 어디에 뭘 설정하는지 헷갈릴 수 있다.

response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");

따라서 위와같이 setXXX()함수를 사용해서 값을 넣을 수 있다.

 

Cookie 설정
// 문자열 세팅 방법 
-> response.setHeader("Set-Cookie", "myCookie=good;Max-Age=600");

// 쿠키 객체 생성 후 세팅 방법
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); // 600초
response.addCookie(cookie);

 

Redirect 설정
HTTP Code 302로 "/basic/hello-form.html" 로 리다이렉트한다고 하자.

// 문자열로 세팅 방법
response.setStatus(HttpServletResponse.SC_FOUND); //302
response.setHeader("Location", "/basic/hello-form.html");

// sendRedirect() 함수 사용
response.sendRedirect("/basic/hello-form.html");

 

위와 같이 응답 패킷의 헤더를 작성하는 방법들이 존재한다. 클라이언트의 요청으로부터 적절한 응답을 쉽게 보내기 위해 서블릿은 다양한 기능을 갖고 있는것을 알 수 있다. 잘 기억해 두자.

 

응답 메시지 작성 - HTML

  • Response로 HTML View를 보여주고 싶다면 HTML 형식에 맞게 작성해서 반환하면 된다.
  • JSP, thymeleaf 등이 있지만 사용하지 않는 경우의 예시를 드는 것.
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter writer = response.getWriter();
        writer.println("<html>");
        writer.println("<body>");
        writer.println("    <div>Hello?</div>");
        writer.println("</body>");
        writer.println("</html>");
    }
}
  • /response-html로 요청이 오면 HTML 코드가 응답 메시지로 가게 된다. 이때 Content-Type은 text/html로 해줘야 한다.
  • 인코딩은 utf-8로 세팅

HTML 응답

HTML 코드는 안보이고 렌더링 되어서 화면에 보여지고 있는걸 확인할 수 있다.

 

응답 메시지 작성 - JSON

  • 현대에 서버-클라이언트 모델의 REST API 구조로 설계할 때 가장 많이 사용되는 데이터 전송 포맷이다.
  • 딱 값을 key-value로 보내고 이를 처리하는 것은 프론트에게 맡긴다. 혹은 다른 외부서버에 맡긴다. (결제 서버 등)
@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 {

        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");

        HelloData helloData = new HelloData();
        helloData.setUsername("woonsik");
        helloData.setAge(28);
        helloData.setJob("jobSeeker");
        helloData.setSex("male");

        String result = objectMapper.writeValueAsString(helloData);
        response.getOutputStream().println(result);
    }
}
  • 먼저 보낼 Json 데이터를 객체화 하고, 해당 객체를 ObjectMapper를 이용해서 JSON 형식 문자열로 변환하여 보낸다.
  • Content-Type은 application/json, 인코딩은 utf-8이다. JSON은 항상 utf-8이다.

JSON 응답 메시지

받은 응답 메시지가 JSON 인 것을 확인할 수 있다.

 

응답 메시지의 Header 설정과 응답 메시지 바디에 넣는 데이터의 형식 등을 정리해보았다.
반응형
저작자표시 비영리 변경금지 (새창열림)

'스프링 > 스프링 MVC' 카테고리의 다른 글

MVC 패턴을 적용하여 간단한 회원 저장/조회 구현  (0) 2021.12.29
Servlet + JSP를 이용한 간단한 회원 저장/조회 구현  (1) 2021.12.27
Servlet을 이용한 간단한 회원 저장/조회 구현  (1) 2021.12.27
Java Servlet 정리본 _ HttpServletRequest  (0) 2021.12.24
'스프링/스프링 MVC' 카테고리의 다른 글
  • MVC 패턴을 적용하여 간단한 회원 저장/조회 구현
  • Servlet + JSP를 이용한 간단한 회원 저장/조회 구현
  • Servlet을 이용한 간단한 회원 저장/조회 구현
  • Java Servlet 정리본 _ HttpServletRequest
구름뭉치
구름뭉치
구름의 개발일기장
  • 구름뭉치
    구름 개발일기장
    구름뭉치
  • 전체
    오늘
    어제
    • ALL (283)
      • 프로젝트 (23)
        • 토스페이먼츠 PG 연동 시리즈 (12)
        • JWT 방식 인증&인가 시리즈 (6)
        • 스우미 웹 애플리케이션 프로젝트 (1)
        • 스프링부트 기본 보일러 플레이트 구축 시리즈 (2)
        • 마이크로서비스 아키텍쳐 시리즈 (1)
      • 스프링 (43)
        • 스프링부트 API 설계 정리 (8)
        • 스프링부트 RestAPI 프로젝트 (18)
        • 스프링부트 WebSocket 적용기 (3)
        • 스프링 JPA 정리 시리즈 (5)
        • 스프링 MVC (5)
        • 스프링 배치 (2)
        • 토비의 스프링 정리 (2)
      • 기술 학습 (28)
        • 아파치 카프카 (9)
        • 클린 코드 (4)
        • 디자인 패턴의 아름다움 (2)
        • 모던 자바 인 액션 (7)
        • JVM 스레드 딥다이브 (6)
      • Web (25)
        • 정리글 (20)
        • GraphQL 정리글 (2)
        • Jenkins 정리글 (3)
      • 취업 (6)
      • CS (77)
        • 네트워크 전공 수업 정리 (11)
        • OSI 7계층 정리 (12)
        • 운영체제 정리 (19)
        • 데이터베이스 정리 (5)
        • MySql 정리 (17)
        • GoF의 Design Pattern 정리 (12)
      • 알고리즘 (70)
        • 백준 (56)
        • 프로그래머스 (12)
        • 알고리즘 정리본 (1)
      • 기초 지식 정리 (2)
      • 일상 (8)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    키보드 손목 받침대
    mx master s3 for mac
    부다페스트
    마우스
    동유럽
    마우스 패드
    류블라냐
    크로아티아
    레이저
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
구름뭉치
Java Servlet 정리본 _ HttpServletResponse
상단으로

티스토리툴바