본문 바로가기
Develop/Java

[Servlet] HttpServletResponse

by 연로그 2021. 4. 30.
반응형

HttpServletResponse 역할

  • HTTP 응답, 헤더, 바디 생성
  • Content-Type, Cookie, Redirect 등의 기능 제공

 


응답 Header

 

새로 response 폴더를 만들고 ResponseHeaderServlet.java를 생성했다.

@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		// status-line
		res.setStatus(HttpServletResponse.SC_OK);
		
		// response header
		res.setContentType("text/plain");
		res.setCharacterEncoding("utf-8");
		//res.setHeader("Content-Type", "text/plain;charset=utf-8");
		res.setHeader("Cache-Contorl", "no-cache, no-store, must-revalidate");
		res.setHeader("Pragma", "no-cache");
		res.setHeader("temp-header", "hello world");

		PrintWriter writer = res.getWriter();
		writer.println("ok");
	}
}

HttpServletResponse는 기본적으로 .setHeader()를 통해 헤더를 세팅할 수 있다.

이 외에도 setContentType, setCharacterEncoding 등을 사용할 수 있다.

 

이 외에도 쿠키나 리다이렉트를 설정할 수 있는데, 예제로는 아래와 같다.

 

쿠키 설정하기

private void cookie (HttpServletResponse res) {
	Cookie cookie = new Cookie("myCookie","good");
	cookie.setMaxAge(600);
	res.addCookie(cookie);
}

오류 1) Cookie(String, String)이 불가능하다는 오류가 뜰 경우, import를 잘 살펴봐라

-> import javax.servlet.http.Cookie;

 

 

리다이렉트 설정하기

private void redirect (HttpServletResponse res) {
	res.setStatus(HttpServletResponse.SC_FOUND);
	res.setHeader("Location", "/basic/hello-form.html");
//	res.sendRedirect("/basic/hello-form.thml");
}

 

 


응답 데이터

 

html 형식으로 응답하기

ResponseHtmlServlet.java를 생성한다.

@WebServlet(name="responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
		// Content-Type: text/html;charset=utf-8
		res.setContentType("text/html");
		res.setCharacterEncoding("utf-8");
		
		PrintWriter writer = res.getWriter();
		writer.println("<html>");
		writer.println("<body>");
		writer.println(" <div>안녕?</div>");
		writer.println("</body>");
		writer.println("</html>");
	}
}

한글이 깨지는 것을 대비해 ContentType과 Encoding을 설정해뒀다.

 

 

Json 형식으로 응답하기

ResponseJsonServlet.java 생성

@WebServlet(name="responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet{
	
	private ObjectMapper mapper = new ObjectMapper();
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
		res.setContentType("application/json");
		res.setCharacterEncoding("utf-8");
		
		// HelloData 객체
		HelloData helloData = new HelloData();
		helloData.setUsername("yeonlog");
		helloData.setAge(25);
		
		// json 형태로 바꾸기
		String result = mapper.writeValueAsString(helloData);
		res.getWriter().write(result);
	}
}

HelloData에 값을 넣고, json 형태로 바꾸고 응답을 보내줬다.

 

Content-Type: application/json 형태로 잘 온 것을 확인할 수 있다.

 

추가적으로, application/json;charset=utf-8은 의미 없는 코드다.

json은 기본적으로 utf-8을 사용하기 때문에..

하지만 getWriter()를 사용하다보면 자동적으로 뒤에 추가되므로, 이 경우에는 getOutputStream()으로 출력하면 된다.

 


본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.

내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.

 

inf.run/B756

 

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

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

www.inflearn.com

 

반응형