Servlet 4 - HttpServletResponse

Jan 10, 2023

4 mins read

HttpServletResponse를 가지고 HTTP 응답코드, 해더생성, 바디생성을 해본다. (인프런 강의 듣는 중)

1. HttpServletResponse 기본 사용법

  • hello.servlet.basic아래 reponse 폴더를 만든 후 ResponseHeaderServlet 클래스를 생성하고 브라우저에서 요청이 있을때 응답을 어떻게 줄 수 있는지 확인한다.
package hello.servlet.basic.reponse;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@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.setStatus(HttpServletResponse.SC_BAD_REQUEST); //400
		
		//[response-headers] 해더생성
		//아래 주석처럼 setHeader로 Content-Type을 줄 수도있고 아래 편의 메소드를 사용해서 줄 수도 있다.
		//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"); //사용자 지정 해더
		
		//Content-Type 편의 메서드
		content(response);
		//쿠키 편의 메서드
		cookie(response);
		//redirect 편의 메서드
		redirect(response);
		
		response.getWriter().write("ok");
	}
	
	//Content-Type 편의 메서드
	private void content(HttpServletResponse response) {
		 //Content-Type: text/plain;charset=utf-8
		 //Content-Length: 2
		 //response.setHeader("Content-Type", "text/plain;charset=utf-8");
		 response.setContentType("text/plain"); 
		 response.setCharacterEncoding("utf-8");
		 //response.setContentLength(2); //(생략시 자동으로 길이 생성)
	}
	
	//쿠키 편의 메서드
	private void cookie(HttpServletResponse response) {
		 //Set-Cookie: myCookie=good; Max-Age=600;
		 //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");
		}
	
}
  • 개발자 도구에서 내가 지정한 응답 정보들을 볼 수 있다.

f12_header

2. HttpServletResponse 응답 데이터

  • ResponseHtmlServlet 클래스 만들어서 HTML로 데이터 보내보기
package hello.servlet.basic.reponse;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

}
  • 브라우저에서 HTML 응답 확인

html_response

  • ResponseJsonServlet 클래스 만들어서 JSON으로 데이터 보내보기 (Servlet 3에서 만든 HelloData 클래스 사용)
package hello.servlet.basic.reponse;

import java.io.IOException;

import com.fasterxml.jackson.databind.ObjectMapper;

import hello.servlet.basic.HelloData;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@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: text/html;charset=utf-8
		response.setContentType("application/json");
		response.setCharacterEncoding("utf-8");
		
		HelloData helloData = new HelloData();
		helloData.setAge(20);
		helloData.setUsername("aroong");
		
		//{"username":"aroong","age":20}
		String result = objectMapper.writeValueAsString(helloData);
		response.getWriter().write(result);
		
	}
	
}
  • 브라우저에서 JSON 응답 확인

json_response