servlet的請求轉發與重定向

servlet可以將發送給自己的某個請求轉發給另外一個URL地址,這個地址可以是html、jsp、servlet或是其他的http地址。servlet的請求轉發有三種方式:
1.inclue方法,應用代碼爲request.getRequestDispatcher("/url").include (request, response),其中URL地址是某個http地址。include轉發時,地址欄沒有改變,是原來的地址,這個過程是在服務器端完成,Servlet和被包含的頁面同時被輸出。
2.forward方法,request.getRequestDispatcher("/url").forward(request, response),地址欄也不會改變,同樣是在服務器端完成,[color=red]但僅輸出被轉發的URL中的內容[/color]。
3.sendRedirect,只是客戶重新發起一個請求,第二個請求指向其參數url。一般稱做重定向,[color=red]客戶端的地址欄將改變爲url值[/color],是由客戶端發起的第二次請求。參數中要寫明具體的url地址,因爲當客戶端再次發送請求時,會直接請求web服務器根目錄。要是要轉發的一個html地址,它在WEB-INF文件夾下,那麼要從servlet轉發到這個
html地址,必須加上當前的web路勁名,這個路勁名可以通過request.getContextPath()獲得,那麼該轉發代碼可以爲response.sendRedirect(request.getContextPath()+"/login.html");


注意:重定向是瀏覽器向服務器重新發出請求,但轉發相當於把request的範圍擴大,例如:
在a界面有個連接<a href="b.jsp?id=1">,在b界面可以通過request.getAttribute("id")獲得,
在b界面也有個連接<a href="c.jsp?name="123">,則在界面用request.getAttribute("id")就取不到值。這是每個連接就像一個重定向,相當於重新創建了一個request,當b->c時,a->b的request已經結束了。
接下來,在c的界面前加<jsp:forward page="d.jsp"/> ,那麼變量name在c、d都有效,所以在d想取到參數name的值,不必要把參數值放到session裏來擴大他的範圍。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章