在web應用服務中,經常會面對不同SERVLET之間的跳轉,目前我們可以通過以下兩種方式實現:
1.RequestDispatcher.forward()
2.ServletResponse.sendReDirect()
兩者的區別:
1.redirect 方式可以跨應用訪問,forward 只能在同一個應用中跳轉。
2.forward 客戶端訪問服務器,服務器找到要跳轉的相應URL並執行返回給客戶端。客戶端的地址欄顯示的是原始URL。
redirect 客戶端訪問服務器,服務器找到要跳轉的URL並將URL發給客戶端,再由客戶端對新的URL重新發送請求。客
戶端的地址欄顯示的是第二次請求的URL。
3.數據的傳輸:在request中的數據,forward可以訪問,redirect不行,因為redirect已經是一個新的請求。
相對路徑的理解:
forward中"/"相對於web應用.
從http://localhost:8080/Test/gw/page.jsp中轉發
<jsp:forward page="OtherPage.jsp"/>在JSP頁面被解析后轉換成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp
<form action="/ddd"> 和 response.sendRedirect("/ddd"); 相對於服務器根路徑.
假設轉發代碼包含於注冊的servlet-url為/ggg/tt;jsp為/ggg/tt.jsp:
絕對路徑:response.sendRedirect("http://www.brainysoftware.com")發送http://www.brainysoftware.com
根路徑:response.sendRedirect("/ooo")發送至http://localhost:8080/ooo
相對路徑:response.sendRedirect("ooo")發送至http://localhost:8080/Test/ggg/ooo