Existuje niekoľko obrazoviek a servletov, ktoré spolu tvoria webovú aplikáciu založenú na Java. JSP odovzdá riadenie z jedného servletu na iný servlet alebo JSP dvoma spôsobmi - vpred a presmerovanie. Metóda Forward preposiela požiadavku z jedného servletu na iný prostriedok vo webovej aplikácii a týmto prostriedkom môže byť iný servlet, stránka JSP alebo súbor HTML..
Metóda presmerovania na druhej strane presmeruje žiadosť na inú aplikáciu. Nemôžete to urobiť pomocou metódy forward. Ak presmerovanie zasiahne iný prostriedok v tej istej aplikácii, potom použije inú adresu URL, ako bola pôvodná adresa URL žiadosti. Ak nechcete odpovedať na žiadosť, môžete ju presmerovať na inú adresu URL a prehliadač potom pošle novú žiadosť na adresu URL, ktorú ste uviedli. Tento príspevok zdôrazňuje niekoľko rozdielov podrobne vysvetľujúcich tieto dve metódy.
Vo webových systémoch alebo aplikáciách je často potrebné prenášať riadenie medzi rôznymi zdrojmi alebo JSP. Napríklad, ak si prajete zadať objednávku z webu elektronického obchodu, musíte sa pred pokračovaním najskôr zaregistrovať. Ak ešte nie ste zaregistrovaný v ich systéme, nákupný košík bude možno musieť preniesť kontrolu do formulára JSP, ktorý je zodpovedný za proces registrácie. Forwardová akcia sa používa špeciálne na tento účel. Používa sa na postúpenie žiadosti z jedného JSP na iný alebo iný zdroj v rovnakom kontexte.
Táto metóda sa používa aj na posielanie požiadaviek HTTP, ale na rozdiel od forwardov je to dvojkrokový proces, pri ktorom dôjde k presmerovaniu na strane klienta do inej aplikácie. Metóda presmerovania presmeruje používateľa na novú webovú adresu. Prehliadač klienta automaticky zadá novú požiadavku na adresu URL uvedenú v hlavičke presmerovania, ktorá pochádza zo servera. Vyžaduje si to okružnú komunikáciu s klientom, takže je relatívne pomalšia ako vpred.
Metóda forward () sa používa na postúpenie žiadosti z jedného JSP do druhého alebo z jedného JSP na servlet alebo z jedného JSP do iného zdroja vo webovej aplikácii. Kontrolu odovzdáva interne kontajner a prehliadač / klient nie je zapojený do procesu. Metóda forward je deklarovaná v RequestDispatcher. Metóda SendRedirect () je deklarovaná v HttPServletResponse a používa sa na presmerovanie požiadavky klienta na inú URL, ktorá je k dispozícii na inom serveri alebo kontexte. Pomocou presmerovania môžete prehliadač úplne presmerovať na inú aplikáciu.
Jedným z kľúčových rozdielov medzi týmito dvoma metódami je to, že webový kontajner spracúva všetky procesy interne v prípade forward () a URL sa v klientskom prehliadači nezmení, takže klient / prehliadač sa ich nezúčastňuje, takže ich úplne nevie, že akcia sa už uskutočnila. V prípade SendRedirect () táto metóda nastaví príslušné hlavičky a obsah tela na presmerovanie žiadosti na inú adresu URL a prehliadač sa postará o odoslanie novej žiadosti na adresu URL, ktorá je pre klienta viditeľná pri zmene adresy URL v prehliadači..
Keď sa metóda forward () vykoná v čase žiadosti, aktuálna požiadavka sa postúpi na inú stránku JSP a spracovanie aktuálnej JSP sa ukončí. Požiadavka sa môže poslať na servlet napísaný v programovacom jazyku Java alebo na statickú stránku HTML. Požiadavka SendRedirect () jednoducho povie prehliadaču, aby prešiel na inú webovú adresu a kontrolu vykonávania odoslal mimo webovú aplikáciu. Používa postup v dvoch krokoch, ktorý inštruuje adresu URL prehliadača, aby urobila ďalšiu požiadavku, ktorá prenesie kontrolu na klienta.
Funkcia forward () pracuje v rámci servera a vykonáva sa rýchlejšie ako funkcia SendRedirect (). Presmerovanie musí prejsť prehliadačom a potom počkať, kým prehliadač nevytvorí novú požiadavku HTTP. Presmerovanie spôsobí, že server odošle stavový kód 302 odpovede HTTP s hlavičkou umiestnenia obsahujúcou novú adresu URL do prehliadača a potom, čo prehliadač dostane stavový kód 302, odošle novú požiadavku na adresu URL nájdenú v hlavičke umiestnenia. Vyžaduje si to okružnú komunikáciu s klientom, vďaka ktorej je relatívne pomalšia ako vpred ().
Poznanie rozdielu medzi metódami presmerovania dopredu a presmerovania je jednou z najdôležitejších častí pre vývojárov Java. Zatiaľ čo na konci spracovania žiadosti môže radič vykonať buď forwardovú alebo presmerovaciu metódu, majú vlastnú sadu použití. Väčšinu času by ste použili metódu forward (), pretože je nepatrne rýchlejšia ako technológia SendRedirect (), ktorá v skutočnosti vyžaduje okružnú komunikáciu s klientom, ktorá ju spomaľuje ako forward. S presmerovaním môžete prehliadač nasmerovať na inú aplikáciu. To sa nedá urobiť dopredu. Stručne povedané, forward pracuje najlepšie, keď jeden komponent musí vykonávať obchodnú logiku a zdieľať výsledky s iným komponentom, zatiaľ čo presmerovanie funguje najlepšie, keď by mal byť klient presmerovaný z jednej stránky na druhú..