ABOUT ME

Today
Yesterday
Total
  • Forwarding이란?
    JSP 2025. 1. 30. 23:30
    반응형
     

    Forwarding은 웹 애플리케이션에서 한 서블릿이나 JSP 페이지가 다른 서블릿이나 JSP 페이지로 요청을 전달하는 방식입니다. 이 과정에서 클라이언트에게는 요청이 계속해서 동일하게 보이고 URL도 변경되지 않습니다. 즉, 클라이언트는 요청이 다른 페이지로 전달된 사실을 알 수 없습니다.

    Forwarding의 작동 방식

    1. RequestDispatcher:
      • RequestDispatcher 객체는 요청을 다른 서블릿이나 JSP 페이지로 전달하는 데 사용됩니다.
      • 이 객체는 ServletRequest.getRequestDispatcher(String path) 메서드를 통해 생성됩니다.
      • forward() 메서드를 사용하여 요청을 다른 리소스로 전달합니다.
    2. 특징:
      • URL 변경 없음: 요청이 전달되면 클라이언트의 브라우저는 URL을 변경하지 않습니다. 즉, 클라이언트는 페이지 이동을 알 수 없습니다.
      • 서버 내 처리: 클라이언트는 서버에서 처리된 결과만 받으며, 중간에 어떤 서블릿이 처리했는지, 어떤 페이지로 요청이 전달되었는지는 알 수 없습니다.
      • 서버 자원 공유: 요청이 포워딩되면, 최초의 요청에서 생성된 데이터를 다른 서블릿이나 JSP에서 공유할 수 있습니다. 예를 들어, request.setAttribute()로 데이터를 저장하고, forward()로 전달하면 후속 페이지에서 해당 데이터를 사용할 수 있습니다.

    Forwarding 사용 예시

    1. 서블릿에서 Forwarding

    // 서블릿에서 RequestDispatcher 사용 예시
    @WebServlet("/example")
    public class ExampleServlet extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 요청 데이터 처리
            String message = "Hello from ExampleServlet";
            request.setAttribute("message", message);
    
            // 다른 JSP로 요청 포워딩
            RequestDispatcher dispatcher = request.getRequestDispatcher("/result.jsp");
            dispatcher.forward(request, response);  // 포워딩
        }
    }

     

    2. JSP에서 Forwarding

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%-- JSP에서 RequestDispatcher 사용 예시 --%>
    <%
        String message = "Hello from JSP!";
        request.setAttribute("message", message);
        
        // 다른 JSP로 포워딩
        RequestDispatcher dispatcher = request.getRequestDispatcher("/nextPage.jsp");
        dispatcher.forward(request, response);
    %>

    주요 메서드

    • getRequestDispatcher(String path): 요청을 전달할 리소스를 지정합니다.
    • forward(ServletRequest request, ServletResponse response): 요청을 지정한 리소스로 포워딩합니다.

    Forwarding vs Redirect

    • Forward:
      • 서버 내에서 처리된 후, 클라이언트는 요청이 다른 리소스로 전달된 사실을 모른 채 처리 결과만 받습니다.
      • URL은 변경되지 않으며, 요청 데이터(request 객체에 저장된 데이터 등)는 그대로 유지됩니다.
    • Redirect:
      • 클라이언트에게 새로운 URL로 요청을 보냅니다. 클라이언트는 URL을 변경한 후 새로운 리소스를 요청합니다.
      • 클라이언트는 이전 리소스에서 다른 리소스로 이동했음을 알 수 있습니다.

    Forwarding의 사용 예

    • 서버 내 여러 페이지로의 흐름 제어: 예를 들어, 로그인 후 사용자 정보를 처리하는 서블릿에서 로그인 결과를 다른 JSP로 포워딩하는 경우.
    • 데이터 공유: 서블릿에서 request.setAttribute()로 데이터를 저장하고, 해당 데이터를 다른 서블릿이나 JSP에서 활용할 때 포워딩을 사용할 수 있습니다.

    요약

    forward()는 클라이언트가 URL 변경 없이 다른 리소스로 요청을 전달하는 방식으로, 서버 내부에서 리소스를 이동시키는 방식입니다. RequestDispatcher를 사용하여 포워딩을 처리하고, 클라이언트는 이를 인지하지 못합니다.


    Forwarding의 개념을 시각적으로 표현한 다이어그램:

    1. 클라이언트 → 서블릿/서버: 클라이언트가 웹 브라우저에서 요청을 보냅니다.
    2. 서블릿이 처리 후 포워딩: 서버에서 서블릿이 요청을 처리하고, 다른 JSP 페이지나 서블릿으로 요청을 포워딩합니다. 이때 클라이언트는 URL이 변경된 것을 알 수 없습니다.
    3. 서블릿 → JSP: 포워딩된 페이지에서 요청을 처리한 결과를 클라이언트에 반환합니다.
    4. 클라이언트: 클라이언트는 처리된 결과를 받으며, URL은 변화하지 않음을 알 수 있습니다.

    다이어그램 형태로 설명:

    +------------------+             +------------------+             +------------------+
    |    클라이언트    |  ----->    |     서블릿        |  ----->    |      JSP         |
    | (브라우저)        |             |  (요청 처리 후)   |             |  (응답 처리 후)  |
    +------------------+             +------------------+             +------------------+
        | (요청)               포워딩              (응답)
        |---------------------------------------------------->
                           (URL 변경 없음)
    • 클라이언트 → 서블릿: 클라이언트가 웹 브라우저를 통해 request를 서버로 보냅니다.
    • 서블릿 → JSP (Forwarding): 서블릿은 데이터를 처리한 후, RequestDispatcher의 forward() 메서드를 사용해 요청을 JSP 페이지로 전달합니다. 이때 URL은 클라이언트에게 변경되지 않습니다.
    • 서블릿/JSP → 클라이언트: JSP 페이지는 최종적으로 클라이언트에게 응답을 보냅니다.

    이 과정에서 클라이언트는 요청을 보낸 페이지 URL이 변경되었다고 느끼지 않으며, 요청이 서버 내에서 포워딩된 것입니다. URL이 그대로 유지되므로 클라이언트는 페이지 이동을 인지하지 못합니다.

    반응형

    'JSP' 카테고리의 다른 글

    댓글

Designed by Tistory.