servlet的請求轉發與重定向
06-08
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),地址欄也不會改變,同樣是在伺服器端完成,但僅輸出被轉發的URL中的內容。3.sendRedirect,只是客戶重新發起一個請求,第二個請求指向其參數url。一般稱做重定向,客戶端的地址欄將改變為url值,是由客戶端發起的第二次請求。參數中要寫明具體的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里來擴大他的範圍。
推薦閱讀:
推薦閱讀:
※真人演示全套高溫瑜伽26式,明星推薦,值得轉發收藏!(附高溫瑜伽視頻)
※[轉載]小成圖參伍倚數法入門(轉發)
※看到睡佛的人,2分鐘內轉發,霉運盡除,好運相伴~!
※轉發陶陶媽寫的《我的中醫育兒之路》
※四柱中,行運,六親,婚動,口訣心法(建議轉發收藏)