重定向與轉發的區別:
⑴重定向:將一個請求處理完畢需要執行另一個請求,瀏覽器重新發送一個請求,重定向請求可以是任意請求。
轉發:在相應一個請求的時候,執行一部分之后需要轉向另一個請求繼續執行,比如servlet處理之后需要轉向到jsp顯示數據。
⑵運用:
重定向:
redirect.sendDirect(轉發路徑);//次路徑可以是任意應用路徑 或者: response.setStatus(302);//向瀏覽器發送302狀態碼 response.setHeader("location",重定向路徑);//發送響應頭Location為所給路徑
轉發:
request.getRequestDisparter(轉發路徑).forward(request,response);
⑶特點與區別
轉發的應用路徑與當前應用共享request,重定向則不行。
轉發發生在服務端,重定向發生在瀏覽器。
轉發路徑只能在當前應用內,重定向路徑任意。
⑷圖解
由於轉發和重定向的路徑改變問題也導致了jsp中關於外部引用格式的問題,比如css路徑的正確書寫:
因為重定向(以定向jsp文件為例)之后的路徑是是定向后的文件的具體路徑,而轉發后的路徑是沒變的,仍然是設置轉發的文件路徑(以servlet向jsp轉發),即servlet路徑,詳情如下圖: