dispatch를 이용한 포워드 방법
dispatch를 이용한 포워드 방법
dispatch를 이용한 포워딩 과정이 redirect 방법과 다른 점은 클라이언트의 웹 브라우저를 거치지 않고 서버에서 포워딩이 진행된다는 것입니다. 따라서 웹 브라우저 주소창의 URL이 변경되지 않습니다. 즉, 클라이언트 측에서는 포워드기 진행되었는지 알 수 없습니다. 즉, 클라이언트 측에서 포워드가 진행되었는지 알 수 없습니다.
1. 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청합니다.
2. 첫 번째 서블릿은 RequestDispatch를 이용해 두 번째 서블릿으로 포워드합니다.
서블릿을 이용한 dispatch 포워딩 실습
1. sec03.ex01 패키지에 다음과 같이 두 개의 서블릿 클래스를 추가합니다.

2. FirstServlet 클래스를 다음과 같이 작성합니다. RequestDispatcher 클래스를 이용해 두 번째 서블릿인 second를 지정한 후 forward() 메서드를 이용해 포원드합니다.
package sec03.ex01;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
RequestDispatcher dispatch = request.getRequestDispatcher("second");
dispatch.forward(request, response);
}
}
3. 두 번째 서블릿인 SecondServlet 클래스를 다음과 같이 작성합니다.
package sec03.ex01;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/second")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("dispatch를 이용한 forward 실습입니다.");
out.println("</html></body>");
}
}
4. 실행해 보면 웹 브라우저 주소 창의 URL이 변경되지 않고 그대로입니다. 이는 서블릿의 포워드가 서버에서 수행되었기 때문입니다.

5. 이번에는 dispatch로 이용해 전송할 때 GET 방식으로 데이터를 전송해 봅시다. 앞의 서블릿 클래스를 다음과 같이 수정합니다. 서블릿 이름 다음에 ?name=lee를 추가하여 GET 방식으로 name 값을 두 번째 서블릿으로 전달합니다.
package sec03.ex01;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
RequestDispatcher dispatch =
request.getRequestDispatcher("second?name=lee");
dispatch.forward(request, response);
}
}
6. dispatch를 이용해 전달된 name 값으로 출력합니다.
package sec03.ex01;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/second")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.println("<html><body>");
out.println("이름:" + name);
out.println("<br>");
out.println("dispatch를 이용한 forward 실습입니다.");
out.println("</html></body>");
}
}
7. GET 방식으로 dispatch를 이용해 데이터를 전달해도 웹 브라우저의 URL은 변경되지 않습니다.

'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글
| ServletContext 사용법 (1) | 2025.06.18 |
|---|---|
| 바인딩 (1) | 2025.06.15 |
| 서블릿 포워드 기능 & 서블릿의 여러 가지 포워드 방법 (1) | 2025.06.09 |
| 회원 정보 삭제하기 (1) | 2025.06.06 |
| DataSource 이용해 회원 정보 등록하기 (1) | 2025.06.03 |