天天看點

如何深入淺出的了解跳轉方式:重定向和請求轉發

          轉發過程

    客戶首先發送一個請求到伺服器端,伺服器端發現比對的servlet,并指定它去執行,當這個servlet執行完之後,它要調用getRequestDispacther()方法,把請求轉發給指定的student_list.jsp,整個流程都是在伺服器端完成的,而且是在同一個請求裡面完成的,是以servlet和jsp共享的是同一個request,在servlet裡面放的所有東西,在student_list中都能取出來,是以,student_list能把結果getAttribute()出來,getAttribute()出來後執行完把結果傳回給用戶端。整個過程是一個請求,一個響應。

 重點:轉發是伺服器行為,是以也是在這個應用内轉發,整個過程是一個請求一個響應,共享一個request,是以由request執行轉發操作,request.getRequestDispacther("url").forward(request,response)

    客戶發送一個請求到伺服器,伺服器比對servlet,這都和請求轉發一樣,servlet處理完之後調用了sendRedirect()這個方法,這個方法是response的方法,是以,當這個servlet處理完之後,看到response.senRedirect()方法,立即向用戶端傳回這個響應,響應行告訴用戶端你必須要再發送一個請求,去通路student_list.jsp,緊接着用戶端受到這個請求後,立刻發出一個新的請求,去請求student_list.jsp,這裡兩個請求互不幹擾,互相獨立,在前面request裡面setAttribute()的任何東西,在後面的request裡面都獲得不了。可見,在sendRedirect()裡面是兩個請求,兩個響應。

重點:重定向是用戶端行為,也就注定可以向任何位址發送請求,用戶端行為的改變是伺服器所給的訓示,亦即是response的行為傳回,就像一個人不能兩次同時踏進一個河流一樣,每次請求都是新的行為,request不保留上次的内容。

兩者最大差別是:運用forward方法隻能重定向到同一個Web應用程式中的一個資源。而sendRedirect方法可以讓你重定向到任何