일정 시간이 지나고 나서 자동으로 서버에 요청을 보내는 '리프래시(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 응답 결과를 확인한다.
응답 정보를 살펴보면 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).
참고로 meta태그는 반드시 head태그 안에 선언해야 한다. body태그에 선언해서는 안 된다.
위 예제와 같이 작업 결과를 출력한 후 다른 페이지로 이동할 때는 리프레시를 사용한다. 만약 작업 결과를 출력하지 않고 다른 페이지로 이동할 때는 '리다이렉트'로 처리한다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
29. 서블릿 초기화 매개변수 (1) (0) | 2022.01.25 |
---|---|
28. 리다이렉트 (0) | 2022.01.24 |
26. 요청 매개변수의 한글 깨짐 처리 (0) | 2022.01.22 |
25. HttpServlet으로 POST 요청 다루기 (0) | 2022.01.20 |
24. HttpServlet으로 GET 요청 다루기 (0) | 2022.01.19 |
댓글