본문 바로가기
Spring/스프링 MVC

[스프링 MVC 1편] 2 - (6) HTTP 응답 데이터

by Poorm 푸름 2023. 11. 4.

* 스프링 입문은 Window로 스프링 MVC 1편은 Mac으로 진행합니다  
 *  진도 : 섹션2 - (11) ~ (13)
 *          : 자바 클래스명,         : 코드,         : 단축키

 

1. HTTP 응답 

  1. 단순 텍스트 응답
    ( writer.println("ok"); )

  2. HTML 응답

  3. HTTP API - MessageBody JSON 응답


2. HTTP 응답 - HTML 버전 

[ src - main - java - hello.servlet - basic - response - ResponseHtmlServlet ]

 

- public class ResponseHtmlServlet extends HttpServlet 

  • 서블릿을 사용하기 위해 HttpServlet을 상속받는다

- @WebServlet(name = "responseHtmlServlet ", urlPatterns = "/response-html" )

  • 해당 어노테이션에 경로를 입력하면 클라이언트에서 톰캣서버가 찾아서 실행한다
  • /response-html 입력하면 하위 메서드 실행
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {

 

 

protected service (control + o)

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

 

 

- content -type 설정

 

  • .jsp파일이나 .html파일에서 폼 태그에 입력한 값을 전송한다고 가정
    • 입력한 값을 전송할 때는 GET방식 or POST방식으로 나뉜다
    • POST방식: 보내는 값이 '한글'일 경우 깨지지 않게 하기 위해 request.setCharacterEncoding("UTF-8"); 사용
    • GET방식: 보내진 한글은 톰캣이 기본적으로 UTF-8 문자코드가 적용이 되어 있어서 자동으로 한글처리

  • response.setCharacterEncoding("utf-8")
    • 위의 코드없이 out.print("안녕");를  출력 한다면 ????과 같이 출력 된다
    • 해결 방법 response.setCharacterEncoding("UTF-8"); 

 

  • response.setContentType("text/html")
    • response.setCharacterEncoding("UTF-8");만 사용하면 '안녕' → '댊뀘'과 같은 문자가 출력
    • 이는 브라우저마다 기본적으로 문자코드를 해석하는 default가 다르기 때문이다
    • 해결 방법 response.setContentType("text/html); 
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://localhost:8080/response-html

 

출력 : 안녕?

 

 

3. HTTP 응답 - API 버전

[ src - main - java - hello.servlet - basic - response - ResponseJsonServlet ]

 

 

- public class ResponseJsonServlet extends HttpServlet 

  • 서블릿을 사용하기 위해 HttpServlet을 상속받는다

- @WebServlet(name = "responseJsonServlet ", urlPatterns = "/response-json" )

  • 해당 어노테이션에 경로를 입력하면 클라이언트에서 톰캣서버가 찾아서 실행한다
  • /response-json 입력하면 하위 메서드 실행
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {

 

 

protected service (control + o)

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

 

 

- content -type 설정

 

  • application/json
    • HTTP 응답으로 JSON을 반환할 때는 content-type을 application/json 로 지정
    • charset=utf-8 지원하지 않는다
    • pplication/json;charset=utf-8 라고 전달할 필요 X
  • response.setCharacterEncoding("utf-8")
    • 위의 코드없이 out.print("안녕");를  출력 한다면 ????과 같이 출력 된다
    • 해결 방법 response.setCharacterEncoding("UTF-8"); 
    • application/json는 charset=utf-8

  • response.setContentType("text/html")
    • response.setCharacterEncoding("UTF-8");만 사용하면 '안녕' → '댊뀘'과 같은 문자가 출력
    • 이는 브라우저마다 기본적으로 문자코드를 해석하는 default가 다르기 때문이다
    • 해결 방법 response.setContentType("text/html);  
response.setHeader("content-type", "application/json");
response.setCharacterEncoding("utf-8");

 

 

- Jackson 라이브러리 생성

private ObjectMapper objectMapper = new ObjectMapper(); // 선언

 

 

- HelloData Json 형태로 바꾸기 (option + command + v)

HelloData helloData = new HelloData();
helloData.setUsername("kim");
helloData.setAge(20);

 

 

- writeValueAsString(data)

  • data를 String 타입으로 변환
  • objectMapper.writeValueAsString() 를 사용하면 객체를 JSON 문자로 변경해준다
String result = objectMapper.writeValueAsString(data);

 

 

- 출력

 
response.getWriter().write(result);

 

 

< 결과 >

 

실행 : http://localhost:8080/response-json

 

출력  

{"username":"kim","age":20}

 

 

 

 

 

[출처] 김영한 강사님 인프런 스프링 mvc1

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com