天天看點

請求重定向、請求轉發、請求包含

重定向:位址欄有變化,一個Servlet,是二個請求

轉發:位址欄沒變化,至少2個Servlet,是一個請求(留頭不留體,意思就是最好不要體(因為你都去叫别人幫忙了,你還做點事,那還不如不叫别人幫忙呢,自己做得了),留個頭就行了,這個頭用HttpWatch可以在重新整理頁面是看到)

包含:與轉發的差別就是又留頭又留體(意思是叫别人幫忙時,你自己也做點事情)

就比如:你的上司叫你做事,你對上司說這事我做不了,您去找李四做吧,這叫重定向(估計明天上司就叫你别來了)

      你的上司叫你做事,你對上司說行(其實自己不行),然後自己悄悄的去找李四幫自己做,這叫轉發,如果自己也做點,那就叫包含。

重定向小結

l  重定向是兩次請求;

l  重定向的URL可以是其他應用,不局限于目前應用;

l  重定向的響應頭為302,并且必須要有Location響應頭;

l  重定向就不要再使用response.getWriter()或response.getOutputStream()輸出資料,不然可能會出現異常;

request擷取請求參數

最為常見的用戶端傳遞參數方式有兩種:

l  浏覽器位址欄直接輸入:一定是GET請求;

l  超連結:一定是GET請求;

l  表單:可以是GET,也可以是POST,這取決與<form>的method屬性值;

GET請求和POST請求的差別:

l  GET請求:

Ø  請求參數會在浏覽器的位址欄中顯示,是以不安全;

Ø  請求參數長度限制長度在1K之内;

Ø  GET請求沒有請求體,無法通過request.setCharacterEncoding()來設定參數的編碼;

l  POST請求:

Ø  請求參數不會顯示浏覽器的位址欄,相對安全;

Ø  請求參數長度沒有限制;

請求轉發與請求包含比較

l  如果在AServlet中請求轉發到BServlet,那麼在AServlet中就不允許再輸出響應體,即不能再使用response.getWriter()和response.getOutputStream()向用戶端輸出,這一工作應該由BServlet來完成;如果是使用請求包含,那麼沒有這個限制;

l  請求轉發雖然不能輸出響應體,但還是可以設定響應頭的,例如:response.setContentType(”text/html;charset=utf-8”);

l  請求包含大多是應用在JSP頁面中,完成多頁面的合并;

l  請求轉發大多是應用在Servlet中,轉發目标大多是JSP頁面;

請求轉發與重定向比較

l  請求轉發是一個請求,而重定向是兩個請求;

l  請求轉發後浏覽器位址欄不會有變化,而重定向會有變化,因為重定向是兩個請求;

l  請求轉發的目标隻能是本應用中的資源,重定向的目标可以是其他應用;

l  請求轉發對AServlet和BServlet的請求方法是相同的,即要麼都是GET,要麼都是POST,因為請求轉發是一個請求;

l  重定向的第二個請求一定是GET;

    有時一個請求需要多個Servlet協作才能完成,是以需要在一個Servlet跳到另一個Servlet!

    > 一個請求跨多個Servlet,需要使用轉發和包含。

    > 請求轉發:由下一個Servlet完成響應體!目前Servlet可以設定響應頭!(留頭不留體,即使設定了響應體)

    > 請求包含:由兩個Servlet共同未完成響應體!(都留)

    > 無論是請求轉發還是請求包含,都在一個請求範圍内!使用同一個request和response!

  * request域

    Servlet中三大域對象:request、session、application,都有如下三個方法:

    > void setAttribute(String name, Object value)

    > Object getAttribute(String name)

> void removeAttribute(String name);

    > 同一請求範圍内使用request.setAttribute()、request.getAttribute()來傳值!前一個Servlet調用setAttribute()儲存值,後一個Servlet調用getAttribute()擷取值。

總之:重定向:位址欄有變化,一個Servlet,是二個請求

轉發:位址欄沒變化,至少2個Servlet,是一個請求(留頭不留體,意思就是最好不要體,留個頭就行了)

就比如:你的上司叫你做事,你對上司說這事我做不了,您去找李四做吧,這叫重定向

你的上司叫你做事,你對上司說行(其實自己不行),然後自己悄悄的去找李四幫自己做,這叫轉發