更新時(shí)間:2022-10-12 10:47:44 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1108次
Servlet重定向與轉(zhuǎn)發(fā)是什么?動(dòng)力節(jié)點(diǎn)小編為大家進(jìn)行詳細(xì)介紹。
有時(shí),我們的 Java Servlet 中的初始 HTTP 請(qǐng)求處理程序需要將請(qǐng)求委托給另一個(gè)資源。在這些情況下,我們可以進(jìn)一步轉(zhuǎn)發(fā)請(qǐng)求或?qū)⑵渲囟ㄏ虻讲煌馁Y源。
我們將使用這兩種機(jī)制并討論每種機(jī)制的差異和最佳實(shí)踐。
首先,讓我們添加 Servlet Maven 依賴項(xiàng):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
</dependency>
現(xiàn)在讓我們直接進(jìn)入并看看如何做一個(gè)簡(jiǎn)單的前鋒:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/forwarded");
dispatcher.forward(req, resp);
}
我們從父 Servlet 獲取RequestDispatcher引用并將其指向另一個(gè)服務(wù)器資源。
簡(jiǎn)單地說,這將轉(zhuǎn)發(fā)請(qǐng)求。
當(dāng)客戶端向http://localhost:8081/hello?name=Dennis提交請(qǐng)求時(shí),此邏輯將運(yùn)行并將請(qǐng)求轉(zhuǎn)發(fā)到“ /forwarded ”。
現(xiàn)在我們了解了轉(zhuǎn)發(fā)的概念,讓我們看一下重定向的快速片段:
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
resp.sendRedirect(req.getContextPath() + "/redirected");
}
我們使用原始響應(yīng)對(duì)象將此請(qǐng)求重定向到另一個(gè) URL:“ /redirected”。
當(dāng)客戶端向http://localhost:8081/welcome?name=Dennis提交請(qǐng)求時(shí),請(qǐng)求將被重定向到http://localhost:8081/redirected。
在這兩種情況下,我們都傳遞了帶有值的參數(shù)“ name ”。簡(jiǎn)單地說,轉(zhuǎn)發(fā)的請(qǐng)求仍然帶有這個(gè)值,但重定向的請(qǐng)求沒有。
這是因?yàn)椋ㄟ^重定向,請(qǐng)求對(duì)象與原始對(duì)象不同。如果我們還想使用這個(gè)參數(shù),我們需要將它保存在HttpSession對(duì)象中。
以下是 servlet 轉(zhuǎn)發(fā)和重定向之間的主要區(qū)別列表:
前鋒:
請(qǐng)求將在服務(wù)器端進(jìn)一步處理
客戶端不受轉(zhuǎn)發(fā)的影響,瀏覽器中的 URL 保持不變
請(qǐng)求和響應(yīng)對(duì)象在轉(zhuǎn)發(fā)后將保持相同的對(duì)象。請(qǐng)求范圍的對(duì)象仍然可用
重定向:
請(qǐng)求被重定向到不同的資源
客戶端將在重定向后看到 URL 更改
創(chuàng)建了一個(gè)新請(qǐng)求
重定向通常在Post/Redirect/Get Web 開發(fā)模式中使用
轉(zhuǎn)發(fā)和重定向都是關(guān)于將用戶發(fā)送到不同的資源,盡管它們具有完全不同的語(yǔ)義。
在這些之間進(jìn)行選擇很簡(jiǎn)單。如果需要先前的范圍,或者不需要通知用戶,但應(yīng)用程序還想執(zhí)行內(nèi)部操作,則使用 forwarding。
要放棄范圍,或者如果新內(nèi)容與原始請(qǐng)求不相關(guān)(例如重定向到登錄頁(yè)面或完成表單提交),請(qǐng)使用 redirecting。
以上就是關(guān)于“Java Servlet重定向與轉(zhuǎn)發(fā)”的介紹,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來關(guān)注一下本站的Servlet教程,里面還有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743