JSP頁面跳轉與請求轉發

JSP頁面跳轉與請求轉發收藏

1、response.sendRedirect(url)

是指請求重定向,原來頁面的參數在這裏是得不到的,即用request.getParameter("param")返回的是null

2、forward請求轉發,指將原頁面的request,response對象傳入新的頁面,因此這新舊頁面擁有相同的 request,response對象。這樣request.getParameter("param")就可以得到相應的值

3、區分ServletContext.getRequestDispatcher與 ServletRequest.getRequestDispatcher

ServletContext.getRequestDispatcher 路徑必須是相對上下文的絕對路徑

ServletRequest.getRequestDispatcher 可以是相對也可以是絕對

4、注意的一點是:使用forward轉發後在瀏覽器上看到的地址欄顯示的是轉發前的還不是轉發後的。如由test.jsp向good.jsp轉發了,那麼地址欄顯示的是test.jsp.這是因爲forward是在服務器端進行的,瀏覽器根本不知道,而重定向是在客戶端進行的,所以使用response.sentRedirect("red.jsp")會直接定向到red.jsp。由此想到index.jsp如果請求的是servlet那麼在servlet中進行forawrd轉發到另一個red.jsp頁面,但當查看結果時,在地址欄顯示的將只是servlet的名稱而不是red.jsp,如果你想知道最終看到的頁面的名稱那只有查代碼了。

reference it:

服務器端進行轉向的4種方法:

1. ServletContext的getRequestDispatcher()

2. ServletContext的getNamedDispatcher()

3. ServletRequest的getRequestDispatcher()

4. ServletResponse的sendRedirect()進行轉向。

1.2.3 => forward() 4. sendRedirect()

使用forward方法,因爲這些這樣比較高效。只有在forward方法不能使用時(比如要轉向到一個非本web應用),再使用ServletResponse的sendRedirect()方法。

與 sendRedirect 方法的比較

雖然 與 sendRedirect 方法,都可以將瀏覽器瀏覽的網頁,重導至另一個網頁,但是兩者在原理上是不太相同。

a. : 動作是利用伺服端,將資料輸出至緩衝區的機制,在前一個網頁尚未輸出到客戶端前,取消資料的輸出,然後輸出另一個網頁的資料,達到重導瀏覽器的效果。

優點: 兩網頁間可以分享 request 對象內的變量。

b. sendRedirect : 動作是透過 HTTP 協議的 Header , 對瀏覽器下達重導指令,因此,不牽涉到服務器端緩衝區的問題。

不過由於 sendRedirect 方法作用於客戶端,所以重導前後網頁無法分享存在於 request 對象內的變量。 
Solution: response.sendRedirect(“sendRedirect.htm?name=sparkwu&[email protected]”)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章