성장일기

내가 보려고 정리하는 공부기록

백엔드/스프링 MVC

[Spring MVC] 4. REQUEST와 RESPONSE에 관하여 (HttpServletRequest, HttpServletResponse..) - (2) Response

와나나나 2024. 9. 13. 22:10
728x90

인프런 김영한 강사님의 스프링MVC 강의를 듣고 학습한 내용을 정리한 게시물입니다.

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

 

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

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

www.inflearn.com

 

 

지난 게시물에 정리한 request에 이어, 이번에는 response에 대해 정리하려고 한다. 아래는 request 정리 게시글이다.

https://wanna-developer02.tistory.com/159

 

[Spring MVC] 4. REQUEST와 RESPONSE에 관하여 (HttpServletRequest, HttpServletResponse..) - (1) Request

인프런 김영한 강사님의 스프링MVC 강의를 듣고 학습한 내용을 정리한 게시물입니다.https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 |

wanna-developer02.tistory.com

 


1.  HttpServletResponse

HttpServletResponse은 요청에 대한 응답을 보낼 때 개발자를 위해 여러 기능을 제공한다.  HttpServletResponse의 역할은 크게 2가지로 나눌 수 있다.

  • HTTP 응답 메시지 생성
    • HTTP 응답코드 지정
    • 헤더 생성
    • 바디 생성
  • 편의 기능 제공
    • Content-type
    • 쿠키
    • 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); //200
		
        //[response-headers]
		response.setHeader("Content-Type", "text/plain;charset=utf-8");
		response.setHeader("Cache-Control", "no-cache, no-store, mustrevalidate");
		response.setHeader("Pragma", "no-cache");
		response.setHeader("my-header","hello");
 
		//[Header 편의 메서드]
        
        // Content 편의 메소드
        	response.setContentType("text/plain");
 		response.setCharacterEncoding("utf-8");
		
        // 쿠키 편의 메소드
        	Cookie cookie = new Cookie("myCookie", "good");
		cookie.setMaxAge(600); //600초
 		response.addCookie(cookie);
        
        // redirect 편의 메소드
        	response.sendRedirect("/basic/hello-form.html");
        
 		PrintWriter writer = response.getWriter();
 		writer.println("ok");
	}
}

 

 

 

⚙️HTTP 응답 데이터 받아오기

request와 비슷하게 HTTP 응답데이터를 받아오는 형식은 아래와 같다.

  • 단순텍스트 응답, HTML
  • JSON

 

✔️ 1. HTTP 응답 데이터 - 단순 텍스트, HTML

HTTP 응답 메시지는 아래와 같은 내용을 담아 전달한다.

  • 단순 텍스트 응답 
    • ex | writer.println("ok");
  • HTML 응답
  • HTTP API - Message body에 JSON 응답

 

✔️  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>");
	}
}

 

단순 텍스트 응답에 사용하는 writer.println()를 이용해 HTML 형식을 작성해 응답한다. 이렇게 반환할 때에는 content-type을 text/html 로 지정해야 한다. 

 

 

✔️ 2. HTTP 응답 데이터 - API 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
 		response.setHeader("content-type", "application/json");
 		response.setCharacterEncoding("utf-8");
 		User user = new User();
 		user.setUsername("gildong");
 		user.setAge(20);
 		//{"username":"gildong","age":20}
 		String result = objectMapper.writeValueAsString(user);
 		response.getWriter().write(result);
 	}
}

 

위 코드 아래쪽처럼 Jackson 라이브러리가 제공하는 objectMapper.writeValuesString() 메소드를 이용해 객체를 JSON 문자로 변경하면 된다. 이때 content-type은 application/json으로 지정한다.