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