Java面試中常常會被問到關于轉發(fā)和重定向的區(qū)別,這兩種方法在Java EE中都可以用于請求的處理,但卻存在著不同的用途和機制。
轉發(fā)(forward)是一種服務器內部的操作,可以將一個請求轉發(fā)給另一個資源進行處理。在轉發(fā)的過程中,瀏覽器地址欄中的URL不會改變,所以用戶不會感知到重定向的存在。使用轉發(fā)的主要目的是為了可以在同一個請求中處理多個操作,例如在一個Servlet中收集表單數據,并將其轉發(fā)給另一個Servlet進行業(yè)務處理。
RequestDispatcher dispatcher = request.getRequestDispatcher("http://www.example.com"); dispatcher.forward(request, response);
而重定向(redirect)是一種將請求重新導向到其他資源的操作,它通過服務器向瀏覽器發(fā)送一個特殊的響應,告訴瀏覽器請求的資源已經移動到了另一個地方,并且在響應頭的Location段中包含了新的URL地址。在重定向的過程中,瀏覽器會向新的URL地址發(fā)送新的請求,所以地址欄中的URL也會改變。使用重定向的主要目的是為了能夠將請求重定向到其他Web應用程序、Web站點或不同端口的內部或外部資源。
response.sendRedirect("http://www.example.com");
總之,在Java EE中,轉發(fā)和重定向都是網絡請求常用的操作。在使用這兩種方法的時候,需要根據具體的需求來選擇哪種方法,以達到更好的網站和應用程序效果。