서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON

2021. 6. 28. 20:47·교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

인프런 김영한 님의 스프링 강의이며, 섹션 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");
    }

redirect 확인


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

실행된 결과화면

 

'교육 및 인강 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글

MVC 패턴 - 개요, 적용, 한계  (0) 2021.06.29
서블릿, JSP - 회원 관리 요구사항, 서블릿으로 만들기, JSP로 만들기  (0) 2021.06.29
서블릿(Servlet) - API 메시지 바디 : 단순 텍스트, JSON  (0) 2021.06.28
서블릿(Servlet) - HTTP 요청 데이터 : 개요, GET 쿼리 파라미터, POST HTML Form  (0) 2021.06.27
서블릿(Servlet) - 서블릿 환경 구성, HttpServletRequest 개요와 기본 사용법  (0) 2021.06.25
'교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
  • MVC 패턴 - 개요, 적용, 한계
  • 서블릿, JSP - 회원 관리 요구사항, 서블릿으로 만들기, JSP로 만들기
  • 서블릿(Servlet) - API 메시지 바디 : 단순 텍스트, JSON
  • 서블릿(Servlet) - HTTP 요청 데이터 : 개요, GET 쿼리 파라미터, POST HTML Form
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    JUnit
    김영한
    오브젝트
    java
    소프트웨어 장인
    스프링
    스터디
    ATDD
    조영호
    자바
    nextstep
    Patterns of Enterprise Application Architecture
    DDD 세레나데
    study
    Test Driven Development
    넥스트스탭
    TDD
    백기선
    추상화
    장인정신
    모든 개발자를 위한 HTTP 웹 기본 지식
    인프런
    이규원
    현실세상의 TDD
    객체지향
    테스트 주도 개발
    인프라공방
    fastcampus
    마틴 파울러
    엔터프라이즈 애플리케이션 아키텍처 패턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON
상단으로

티스토리툴바