Java Web 請求轉發與請求重定向
請求轉發
服務器行為,即用戶向服務器發送了一次http請求,該請求可能會經過多個信息資源處理以后菜返回給用戶,各個信息資源使用請求轉發機制互相轉發請求,但是用戶是感覺不到請求轉發的。通過request.getRequestDispatcher(path).forward(arg0, arg1)實現,是一次請求,轉發后對象會保存,地址欄的url不會改變。
請求重定向
客戶端行為。一般用于避免用戶的非正常訪問。例如:用戶在沒用登錄的情況下訪問后臺資源,servlet可以將該http請求重定向到登錄頁面,讓用戶登陸后再訪問。通過調用response.sendRedirect(arg0)實現,從本質上講等同于兩次請求,前一次的請求對象不會保存,地址欄的url會改變。
二者的原理及區別是什么?
答:Forward和Redirect代表了兩種請求方式:請求轉發和請求重定向。對應到代碼里,分別是RequestDispatcher類的forward()方法和HttpServletRequest類的sendRedirect()方法。
對于請求轉發,客戶端瀏覽器只發出一次請求,Servlet把請求轉發給Servlet、HTML、JSP或其它信息資源,由第2個信息資源響應該請求,兩個信息資源共享同一個request對象。
對于請求重定向,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。它本質上是兩次HTTP請求,對應兩個request對象。