서블릿에서 sendRedirect와 RequestDispatcher로 페이지 이동 처리
웹 애플리케이션에서 클라이언트의 요청을 처리한 후 다른 페이지로 이동해야 할 때가 있습니다. 이때 서블릿에서는 두 가지 주요 방법을 제공합니다: sendRedirect
와 RequestDispatcher
를 통한 포워드입니다. 이 글에서는 리다이렉트와 포워드의 차이점과 각각의 사용 방법을 알아보겠습니다.
1. sendRedirect를 통한 리다이렉트
sendRedirect
메서드는 클라이언트의 요청을 다른 페이지로 리다이렉트할 때 사용됩니다. 리다이렉트를 할 경우, 서버는 클라이언트에게 새로운 URL로 다시 요청을 보내도록 응답하고, 클라이언트는 새로운 URL로 다시 요청을 보냅니다.
특징
- 클라이언트가 새로운 URL로 요청을 다시 보냄.
- URL이 변경됩니다.
- 서버 간의 요청이 아닌 클라이언트-서버 간의 새로운 요청.
sendRedirect 예제
package com.bluesharehub;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/redirectExample")
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// "/newPage"로 리다이렉트
response.sendRedirect("newPage.jsp");
}
}
newPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>New Page</title>
</head>
<body>
<h1>이 페이지는 리다이렉트 후 도착한 페이지입니다!</h1>
</body>
</html>
위 예제에서 클라이언트가 /redirectExample
에 접근하면 서버는 클라이언트에게 /newPage
로 다시 요청을 보내도록 응답합니다.
▼ 실행 결과

2. RequestDispatcher를 통한 포워드
RequestDispatcher
를 사용한 포워드는 서버 내부에서 요청을 다른 서블릿이나 JSP로 전달할 때 사용됩니다. 포워드는 클라이언트에게 요청을 다시 보내지 않고, 서버 간에 요청을 전달하는 방식입니다.
특징
- 클라이언트는 다른 페이지로 포워드되었음을 알지 못함.
- URL이 변경되지 않음.
- 서버 내부에서 요청이 전달됨.
RequestDispatcher 포워드 예제
package com.bluesharehub;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/forwardExample")
public class ForwardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// "/targetPage"로 요청을 포워드
RequestDispatcher dispatcher = request.getRequestDispatcher("/targetPage.jsp");
dispatcher.forward(request, response);
}
}
targetPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Target Page</title>
</head>
<body>
<h1>이 페이지는 포워드된 요청을 처리한 결과입니다!</h1>
</body>
</html>
위 예제에서는 서버 내부에서 /forwardExample
로 들어온 요청을 /targetPage
로 전달합니다. 클라이언트는 포워드된 페이지로 이동했지만 URL은 여전히 /forwardExample
입니다.
▼ 실행 결과

3. 리다이렉트와 포워드의 차이점
리다이렉트 | 포워드 |
---|---|
클라이언트가 새로운 URL로 요청을 다시 보냄. | 서버 내부에서 요청을 처리함. |
URL이 변경됨. | URL이 변경되지 않음. |
클라이언트-서버 간의 새로운 요청. | 서버 간의 요청 처리. |
결론
리다이렉트와 포워드는 각각 다른 시나리오에서 사용됩니다. 리다이렉트는 클라이언트에게 새로운 페이지로 이동하게 할 때, 포워드는 서버 간 요청 처리가 필요할 때 사용됩니다. 이 두 가지 방법을 적절히 활용하면 웹 애플리케이션에서 더욱 유연한 요청 처리가 가능합니다.
함께 보면 좋은 이전 게시글
- web.xml과 애너테이션으로 서블릿 매핑 및 GET/POST 요청 처리
- 서블릿에서 HttpServletRequest와 HttpServletResponse 사용법
- 서블릿에서 GET 요청 파라미터와 POST 폼 데이터 처리하기
- 서블릿을 활용한 쿠키 및 세션 데이터 처리 방법
- 서블릿에서 @WebServlet 애너테이션으로 여러 URL 패턴 처리하기
이 글이 도움이 되셨다면 공유 부탁 드립니다.