Różnica między mechanizmem include I forward dla koncepcji wysyłania wniosków?

Forward (): można to zrobić na dwa sposoby poprzez Request & Serveletkontekst. Przekazywanie żądania z servletu do innego zasobu (servlet, JSP plik, lub plik HTML) na serwerze. Forward odbywa się na po stronie serwera, bez wiedzy klienta.

Po wywołaniu żądania forward, żądanie jest wysyłane do inny zasobów na serwerze, bez informowania klienta że a inny zasób przetworzy żądanie. To proces zachodzi całkowicie z w sieci Pojemnik.

Po prostu

Include: będzie zawierać inny plik w naszym bieżącym pliku

Forward: przekaże bieżące żądanie na stronę przekierowania

Author: mtk, 2012-02-24

4 answers

Główna różnica polega na tym, że gdy używasz forwardkontrola jest przenoszona do następnego servleta/jsp, który wywołujesz, podczas gdy include zachowuje kontrolę z bieżącym servletem, zawiera ona tylko przetwarzanie wykonywane przez wywołujący servlet/jsp(jak robienie każdego out.println lub innego przetwarzania).

 29
Author: mtk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-24 15:12:43

Różnica między tymi dwoma znacznikami polega na tym, jak działają. Dobrze. powiedz przykład, abyś mógł to sobie lepiej wyobrazić.

Załóżmy, że masz dwie strony, pageA i pageB. W pageA napisałeś tag include. W tym przypadku kontrola była w pageA til wywołał tag include. W tym pełna kontrola idzie do pageB. Po zakończeniu, kontrola jest zwracana do pageA począwszy od następnego punktu kodowania po tagu include i kontynuując do reszty pageA.

Cóż, żeby było o wiele jaśniej, powiedzmy, że mamy te same strony, pageA i pageB, ale tym razem użyjemy znacznika forward w pageA, a nie include tag. Ponownie, Kontrola rozpocznie się w pageA dopóki nie wywołamy znacznika forward w pageA, w tym momencie kontrola jest przenoszona do pageB, tak jak Tag include. Ale różnica polega na tym, co się dzieje, gdy pageB kończy. W przypadku forward tag, Kontrola nie wraca do strony.

 57
Author: AmrAngry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 07:35:57

Include (Prośba, odpowiedź);

Jeśli zasób jest statyczny, metoda include włącza programowe include po stronie serwera. Jeśli zasób jest Web komponentem, efektem metody jest wysłanie żądania do dołączonego web komponentu, wykonanie Web komponentu, a następnie uwzględnienie wyniku wykonania w odpowiedzi z dołączonego servletu.

Dołączony komponent web ma dostęp do obiektu request, ale jest ograniczony w tym, co może zrobić z obiektem odpowiedzi.

  • może napisać do treści odpowiedzi i zatwierdzić odpowiedź.
  • nie może ustawiać nagłówków ani wywoływać żadnej metody, takiej jak setCookie, która wpływa na nagłówki odpowiedzi.

Często przydatne jest włączenie innego zasobu sieciowego, np. treści banerów lub informacji o prawach autorskich) w odpowiedzi zwracanej z komponentu sieciowego.

Forward (Prośba, odpowiedź);

W niektórych aplikacjach możesz chcieć zleć jednemu komponentowi web wstępne przetwarzanie żądania, a innemu komponentowi wygenerowanie odpowiedzi. Na przykład możesz chcieć częściowo przetworzyć żądanie, a następnie przenieść je do innego komponentu, w zależności od charakteru żądania.

Aby przenieść kontrolę do innego komponentu web, wywołujesz metodę forward RequestDispatcher. Gdy żądanie jest przekazywane, adres URL żądania jest ustawiany na ścieżkę przekierowanej strony. Oryginalny URI i jego części składowe są zapisywane jako atrybuty żądania.

javax.servlet.forward.[request-uri|context-path|servlet-path|path-info|query-string]  

Metoda forward powinna być używana, aby dać innemu zasobowi odpowiedzialność za odpowiedź na użytkownika. Jeśli masz już dostęp do obiektu ServletOutputStream lub PrintWriter wewnątrz servletu, nie możesz użyć tej metody; w ten sposób rzuca IllegalStateException.

Powiązane linki

 25
Author: Aniket Kulkarni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-28 13:27:47

Zasadnicza różnica między nimi jest taka, że metoda forward () zamknie strumień wyjściowy po jego wywołaniu, natomiast metoda include pozostawia strumień wyjściowy otwarty.

Odpowiedź z przykładem : pozwala mieć stronę servlet o nazwie xxx.java i strona jsp o nazwie yy.jsp

W yy.jsp

WELCOME to yy.jsp

W xxx.java //using forward ()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.forward(request,response); out.println("back to servlet"); //this wont b displayed

Wyjście

WELCOME to yy.jsp 

W xxx.java / / korzystanie include ()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.include(request,response); out.println("back to servlet");

Wyjście

WELCOME to yy.jsp back to servlet

Ale najważniejsze, że nie chodzi o kontrolę, bo jeśli umieścimy

System.out.println("console output");

Po wywołaniu .forward() lub .include(), wyjście konsoli zostanie wygenerowane w każdym przypadku. Its o odpowiedzi do Klienta

Więc podstawową częścią jest jeśli przetwarzamy w komponencie po stronie serwera, a następnie przechodzimy do JSP lub Servletu w celu wygenerowania znaczników dla klienta, raz, że JSP lub Servlet zakończył przetwarzanie, nie możemy już wywoływać żadnych innych komponentów do generowania znaczników, które mogą być wysłane do klienta. Po wykonaniu forward, generowanie znaczników dla bieżącego cyklu żądania i odpowiedzi jest zakończone.

Alternatywnie, za pomocą include, strumień wyjściowy pozostaje otwarty, więc możemy wywołać tyle różnych plików, aby wygenerować potrzebne nam znaczniki po stronie klienta. Możemy więc dołączyć dwa lub trzy pliki JSP, a nawet Servlet w łańcuchu komponentów które generują znaczniki oparte na kliencie. Gdy używamy include, strumień wyjściowy nie jest zamykany po wywołaniu.

 8
Author: uttsav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 15:39:33