본문 바로가기
교재 실습/자바 웹 개발 워크북

27. 리프래시

by Jint 2022. 1. 23.

일정 시간이 지나고 나서 자동으로 서버에 요청을 보내는 '리프래시(Refresh)' 즉, 새로고침을 알아본다.

MemberAddServlet 클래스에서 회원 등록 결과를 웹 브라우저로 보낼 때 리프래시 정보를 함께 보내는 원리이다.

 

- 응답 헤더를 이용한 리프래시

응답 헤더를 이용하여 리프래시 정보를 보낸다. MemberAddServlet 클래스의 doPost()에서 응답 헤더에 리프래시 정보를 추가한다.

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	...
	response.setContentType("text/html; charset=UTF-8");
	PrintWriter out = response.getWriter();
	out.println("<html><head><title>회원등록결과</title></head>");
	out.println("<body>");
	out.println("<p>등록 성공입니다!</p>");
	out.println("</body></html>");

	//리프래시 정보를 응답 헤더에 추가
	response.addHeader("Refresh", "10;url=list");
	//addHeader() : HTTP 응답 정보에 헤더를 추가하는 메소드
	...
}

이후 크롬의 DevTools를 실행한 뒤 톰캣 서버를 시작 또는 재시작한다. 회원 등록 입력폼에서 값을 넣은 후 '추가' 버튼을 클릭한다. 웹 브라우저는 "등록 성공입니다!"라는 내용을 출력한 후 10초 후 회원 목록 화면으로 이동할 것이다. DevTools의 Network탭에서 HTTP 응답 결과를 확인한다.

그림 1 (/member/add의 HTTP 응답 정보)

응답 정보를 살펴보면 Refresh 헤더가 추가된 것을 확인할 수 있다(그림 1). 이 Refresh 헤더의 값을 보면 숫자 10은 응답 본문을 출력하고 나서 10초 뒤에 다시 서비스를 요청하라는 뜻이다. 이때 url은 다시 요청할 서비스 주소다. URL이 '/'로 시작하지 않기 때문에 상대 경로로 계산된다. 즉, 현재 경로가 /member/add 이니 list의 최종 경로는 현재 경로를 기준으로 계산하여 /member/list 이다.

 

- HTML의 meta태그를 이용한 리프래시

리프래시 정보를 HTML 본문에 포함시켜 보낸다. MemberAddServlet 클래스의 doPost()에서 기존에 작성한 응답 헤더를 추가하는 코드를 제거한 뒤 HTML의 head태그 안에 리프래시를 설정하는 meta태그를 추가한다.

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	...
	response.setContentType("text/html; charset=UTF-8");
	PrintWriter out = response.getWriter();
	//out.println("<html><head><title>회원등록결과</title></head>");
	out.println("<html><head><title>회원등록결과</title>");
	//meta태그를 이용한 리프래시
	out.println("<meta http-equiv='Refresh' content='1; url=list'>");
	out.println("</head>");
	out.println("<body>");
	out.println("<p>등록 성공입니다!</p>");
	out.println("</body></html>");

	//리프래시 정보를 응답 헤더에 추가
	//response.addHeader("Refresh", "10;url=list");
	//addHeader() : HTTP 응답 정보에 헤더를 추가하는 메소드
	...
}

톰캣을 재시작한 뒤 실행하면 결과는 응답 헤더에 Refresh를 설정한 것과 같다. 하지만 DevTools의 Network탭에서 HTTP 응답 결과를 확인하게 되면 Refresh 헤더가 보이지 않는다. 리프래시 정보가 HTML 본문에 담겼기 때문이다(그림 2).

그림 2 (/member/add의 HTTP 응답 정보)

참고로 meta태그는 반드시 head태그 안에 선언해야 한다. body태그에 선언해서는 안 된다.

 

위 예제와 같이 작업 결과를 출력한 후 다른 페이지로 이동할 때는 리프레시를 사용한다. 만약 작업 결과를 출력하지 않고 다른 페이지로 이동할 때는 '리다이렉트'로 처리한다.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr

댓글