Sobes.tech
Junior

Czym jest Request Dispatcher?

sobes.tech AI

Odpowiedź od AI

RequestDispatcher jest interfejsem w API Servlet Java, używanym do przekierowania żądania do innego zasobu (np. innego serwletu, JSP lub pliku HTML) w ramach tej samej aplikacji internetowej. Udostępnia dwie metody: forward() i include().

Metody:

  • forward(ServletRequest request, ServletResponse response):

    • Przekazuje całą kontrolę nad żądaniem i odpowiedzią do określonego zasobu.
    • Oryginalny serwlet kończy przetwarzanie.
    • URL na pasku adresu przeglądarki nie zmienia się.
    • Służy do całkowitego delegowania obsługi innemu zasobowi.
  • include(ServletRequest request, ServletResponse response):

    • Włącza zawartość określonego zasobu do odpowiedzi bieżącego serwletu.
    • Oryginalny serwlet kontynuuje działanie po włączeniu.
    • URL na pasku adresu przeglądarki nie zmienia się.
    • Pozwala wielu zasobom uczestniczyć w tworzeniu odpowiedzi.

Uzyskanie RequestDispatcher:

Można go uzyskać albo z obiektu ServletContext, albo z obiektu ServletRequest.

  • Z ServletContext:
    // ścieżka kontekstowa - ścieżka do innego zasobu w ramach aplikacji
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/anotherServlet");
    
  • Z ServletRequest:
    // ścieżka względna - względna ścieżka do innego zasobu
    RequestDispatcher rd = request.getRequestDispatcher("/anotherServlet");
    

Różnice między forward() a include():

Kryterium forward() include()
Kontrola nad odpowiedzią Całkowite przekazanie do docelowego zasobu. Odpowiedź zasobu docelowego jest dodawana do bieżącej.
Wykonanie Oryginalny serwlet kończy działanie. Oryginalny serwlet kontynuuje działanie.
URL Nie zmienia się na pasku adresu przeglądarki. Nie zmienia się na pasku adresu przeglądarki.
Użycie Delegacja obsługi, przekierowanie. Dołączenie zawartości, kompozycja odpowiedzi.

RequestDispatcher jest ważnym narzędziem do budowania złożonych aplikacji webowych, umożliwiającym strukturyzację logiki obsługi żądań i ponowne użycie komponentów.