天天看點

java請求轉發,響應重定向的差別

請求轉發:request.getRequestDispatcher().forward();    例:request.getRequestDispatcher("/index.jsp").forward(request,response);

響應重定向:response.sendRedirect();             例:response.sendRedirect(request.getContextPath + "/index.jsp");

請求轉發過程

    客戶首先發送一個請求到伺服器端,伺服器端發現比對的servlet,并指定它去執行,當這個servlet執行完之後,它要調用getRequestDispacther()方法,把請求轉發給指定的index.jsp,整個流程都是在伺服器端完成的,

而且是在同一個請求裡面完成的,是以servlet和jsp共享的是同一個request,在servlet裡面放的所有東西,在index中都能取出來,是以,index能把結果getAttribute()出來,getAttribute()出來後執行完把結果傳回給用戶端。

整個過程是一個請求,一個響應。

響應重定向過程

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

總結

  請求轉發→一次請求→一次響應

  響應重定向→二次請求→二次響應