java重定向與請求轉發的區別


最近工作不算太忙,今天在這里對java中的重定向和請求轉發稍作總結,希望能幫助到大家。

 

請求轉發:

request.getRequestDispatcher().forward();

重定向:

response.sendRedirect();

例如:

請求轉發:

request.getRequestDispatcher("/student_list.jsp").forward(request,response);

重定向:

response.sendRedirect(request.getContextPath + "/student_list.jsp")



轉發過程:客戶端首先發送一個請求到服務器,服務器匹配Servlet,並指定執行。當這個Servlet執行完后,它要調用getRequestDispacther()方法,把請求轉發給指定的Servlet_list.jsp,整個流程都是在服務端完成的,而且是在同一個請求里面完成的,因此Servlet和jsp共享同一個request,在Servlet里面放的所有東西,在student_list.jsp中都能取出來。因此,student_list.jsp能把結果getAttribute()出來,getAttribute()出來后執行完把結果返回給客戶端,整個過程是一個請求,一個響應。

重定向過程:客戶端發送一個請求到服務器端,服務器匹配Servlet,這都和請求轉發一樣。Servlet處理完之后調用了sendRedirect()這個方法,這個方法是response方法。所以,當這個Servlet處理完后,看到response.sendRedirect()方法,立即向客戶端返回個響應,響應行告訴客戶端你必須再重新發送一個請求,去訪問student_list.jsp,緊接着客戶端收到這個請求后,立刻發出一個新的請求,去請求student_list.jsp,在這兩個請求互不干擾、相互獨立,在前面request里面setAttribute()的任何東西,在后面的request里面都獲得不了。因此,在sendRedirect()里面是兩個請求,兩個響應。

 

Forward是在服務器端的跳轉,就是客戶端一個請求給服務器,服務器直接將請求相關參數的信息原封不動的傳遞到該服務器的其他jsp或Servlet去處理。而sendRedirect()是客戶端的跳轉,服務器會返回客戶端一個響應報頭和新的URL地址,原來的參數信息如果服務器沒有特殊處理就不存在了,瀏覽器會訪問新的URL所指向的Servlet或jsp,這可能不是原來服務器上的webService了。

 

總結:

       1、轉發是在服務器端完成的,重定向是在客戶端發生的;

       2、轉發的速度快,重定向速度慢;

       3、轉發是同一次請求,重定向是兩次請求;

       4、轉發地址欄沒有變化,重定向地址欄有變化;

       5、轉發必須是在同一台服務器下完成,重定向可以在不同的服務器下完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM