@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
}
HttpServletRequest의 setCharacterEncoding()은 매개변수 값의 인코딩 형식을 지정하는 메서드이다.
MemberAddServlet 클래스의 doPost() 메서드에 다음과 같이 응답 헤더에 리프래시 정보를 추가한다.
resp.addHeader("Refresh", "1;url=list");
addHeader()는 HTTP 응답 정보에 헤더를 추가하는 메서드다. 'Refresh' 헤더의 값을 살펴보면 숫자 '1'은 응답 본문을 출력하고 나서 1초 뒤에 다시 서비스를 요청하라는 뜻이다. 이때 url은 다시 요청할 서비스 주소이다. URL이 '/'로 시작하지 않기 때문에 상대 경로로 계산된다. 현재경로가 /member/add 이니까 list의 최종 경로는 현재 경로를 기준으로 계산하여 /member/list가 된다.
out.println("<meta http-equiv='Refresh' content='1; url=list'>");
회원 정보를 등록하고 나서 그 결과를 출력하지 않고 즉시 회원 목록 화면으로 이동하게 해주는 방법이다.
리다이렉트는 클라이언트로 본문을 출력하지 않기 때문에 HTML을 출력하는 코드를 모두 제거한다.
stmt.executeUpdate();
// HTML 코드 제거
resp.sendRedirect("list");
sendRedirect()에 넘기는 URL이 '/'로 시작하지 않기 때문에 상대 주소로 계산된다.
작업 결과를 출력하지 않고 즉시 다른 페이지로 이동하기를 원한다면 '리다이렉트'를 사용하고, 잠깐이나마 작업 결과를 출력하고 다른 페이지로 이동하기를 원한다면 '리프래시'를 사용하면 된다.