요청 매개변수의 한글 깨짐 처리

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
    }

HttpServletRequest의 setCharacterEncoding()은 매개변수 값의 인코딩 형식을 지정하는 메서드이다.

Chapter04(3)-1

리프레시 - 자동으로 회원 목록을 출력하기(새로 고침)

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

MemberAddServlet 클래스의 doPost() 메서드에 다음과 같이 응답 헤더에 리프래시 정보를 추가한다.

resp.addHeader("Refresh", "1;url=list");

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

2. HTML의 meta 태그를 이용한 리프레시

out.println("<meta http-equiv='Refresh' content='1; url=list'>");

리다이렉트

회원 정보를 등록하고 나서 그 결과를 출력하지 않고 즉시 회원 목록 화면으로 이동하게 해주는 방법이다.

리다이렉트 메서드 sendRedirect()

리다이렉트는 클라이언트로 본문을 출력하지 않기 때문에 HTML을 출력하는 코드를 모두 제거한다.

stmt.executeUpdate();
// HTML 코드 제거
resp.sendRedirect("list");

sendRedirect()에 넘기는 URL이 '/'로 시작하지 않기 때문에 상대 주소로 계산된다.

작업 결과를 출력하지 않고 즉시 다른 페이지로 이동하기를 원한다면 '리다이렉트'를 사용하고, 잠깐이나마 작업 결과를 출력하고 다른 페이지로 이동하기를 원한다면 '리프래시'를 사용하면 된다.