Response.SendRedirect
2024. 11. 18. 12:13

response.sendRedirect는 클라이언트-서버 간 통신에서 서버가 클라이언트(브라우저)에게 다른 URL로 이동하라고 지시하는 방식이다.

response.sendRedirect 동작 원리

  1. 클라이언트 요청: 클라이언트가 서버에 HTTP 요청(예: GET 또는 POST)을 보냅니다.
  2. 서버 응답: 서버는 sendRedirect를 사용해 클라이언트에게 302 HTTP 상태 코드와 새 URL을 포함한 Location 헤더를 보냅니다.
  3. 클라이언트 동작: 클라이언트(브라우저)는 응답을 받고, Location 헤더에 지정된 URL로 새로운 요청을 보냅니다.
  4. 최종 처리: 서버는 새 요청을 처리하고 결과를 반환합니다.

특징

  1. URL 변경:
    • 브라우저의 주소창에 새 URL이 표시됩니다.
    • 클라이언트가 새로운 요청을 하기 때문입니다.
  2. 두 번의 요청/응답 과정:
    • 기존 요청과 새 요청이 완전히 별개로 처리됩니다.
    • 기존의 request 데이터는 유지되지 않으므로, 데이터 전달이 필요한 경우 쿼리 파라미터 또는 세션을 사용해야 합니다.
  3. 클라이언트 중심:
    • 서버가 아닌 클라이언트가 새 URL로 이동을 요청합니다.
  4. 외부 URL 가능:
    • 리다이렉션 대상 URL은 같은 서버 내부뿐만 아니라 외부 서버의 URL도 가능합니다.

예제 코드

1. 간단한 사용

response.sendRedirect("https://www.example.com");

2. 내부 페이지로 리다이렉트

response.sendRedirect("/myApp/login.jsp");
  • 클라이언트는 현재 웹 애플리케이션의 login.jsp로 이동합니다.

3. 데이터 전달 (쿼리 파라미터)

String username = "john";

// URL 파라미터 값 인코딩
String encodedUser = URLEncoder.encode(username, "UTF-8");

// 리다이렉트 수행
response.sendRedirect("/myApp/welcome.jsp?user=" + encodedUser);
  • 클라이언트는 welcome.jsp로 이동하며, URL에 user=john이 포함됩니다.
  • welcome.jsp에서 request.getParameter("user")로 값을 가져올 수 있습니다.

sendRedirect vs. RequestDispatcher.forward

특징 sendRedirect RequestDispatcher.forward
요청 방식 클라이언트가 새 요청을 생성 서버 내부에서 요청 처리
주소창 변경 브라우저 주소창이 새 URL로 변경 주소창이 변경되지 않음
HTTP 요청 수 두 번 (기존 요청 + 새 요청) 한 번
외부 URL 이동 가능 불가능 (같은 애플리케이션 내에서만 동작)
속도 느림 (추가 요청 발생) 빠름
데이터 전달 쿼리 파라미터나 세션 사용 request 객체를 통해 데이터 전달 가능

사용 사례

  1. 로그인 성공 후 리다이렉트:
    • 로그인 성공 시 사용자 대시보드로 이동.
response.sendRedirect("/myApp/dashboard.jsp");
  1. 외부 사이트로 이동:
    • 예: 로그아웃 후 외부 페이지로 이동.
  2. 페이지 리프레시 또는 데이터 초기화:
    • 이전 요청의 데이터를 클라이언트에서 지우고 싶을 때.
response.sendRedirect("https://www.google.com");

주의 사항

  1. 기존 데이터 유실:
    • 기존 요청 객체에 저장된 데이터는 새 요청에서 사용할 수 없습니다.
    • 데이터를 유지하려면 세션이나 쿠키를 사용해야 합니다.
  2. 속도 문제:
    • 추가 요청/응답이 발생하므로 RequestDispatcher.forward보다 느릴 수 있습니다.
  3. 상대 경로 주의:
    • 경로를 설정할 때 상대 경로와 절대 경로를 혼동하지 않도록 해야 합니다.

요약

  • response.sendRedirect는 클라이언트 측에서 새 URL로 이동하게 만드는 방식.
  • 브라우저 주소창이 변경되며, 완전히 새로운 요청이 발생.
  • 데이터 전달이 필요한 경우 쿼리 스트링 또는 세션 사용.
  • 외부 URL 리다이렉트가 가능하므로 범용성이 높은 방식입니다.

'Front-End > WEB' 카테고리의 다른 글

서블릿 Filter 설명  (0) 2024.11.20
Binding / Redirect  (0) 2024.11.19
Tomcat Connection Pool  (0) 2024.11.19
Web-Servlet  (0) 2024.11.14
동기/비동기  (0) 2024.11.13