淺談JSP頁面跳轉(zhuǎn)與請求轉(zhuǎn)發(fā)
JSP頁面跳轉(zhuǎn)與請求轉(zhuǎn)發(fā)收藏
1、response.sendRedirect(url)
是指請求重定向,原來頁面的參數(shù)在這里是得不到的,即用request.getParameter("param")返回的是null
2、forward請求轉(zhuǎn)發(fā),指將原頁面的request,response對象傳入新的頁面,因此這新舊頁面擁有相同的 request,response對象。這樣request.getParameter("param")就可以得到相應(yīng)的值
3、區(qū)分ServletContext.getRequestDispatcher與 ServletRequest.getRequestDispatcher
ServletContext.getRequestDispatcher 路徑必須是相對上下文的絕對路徑
ServletRequest.getRequestDispatcher 可以是相對也可以是絕對
4、注意的一點是:使用forward轉(zhuǎn)發(fā)后在瀏覽器上看到的地址欄顯示的是轉(zhuǎn)發(fā)前的還不是轉(zhuǎn)發(fā)后的。如由test.jsp向good.jsp轉(zhuǎn)發(fā)了,那么地址欄顯示的是test.jsp.這是因為forward是在服務(wù)器端進行的,瀏覽器根本不知道,而重定向是在客戶端進行的,所以使用response.sentRedirect("red.jsp")會直接定向到red.jsp。由此想到index.jsp如果請求的是servlet那么在servlet中進行forawrd轉(zhuǎn)發(fā)到另一個red.jsp頁面,但當(dāng)查看結(jié)果時,在地址欄顯示的將只是servlet的名稱而不是red.jsp,如果你想知道最終看到的頁面的名稱那只有查代碼了。
reference it:
服務(wù)器端進行轉(zhuǎn)向的4種方法:
1. ServletContext的getRequestDispatcher()
2. ServletContext的getNamedDispatcher()
3. ServletRequest的getRequestDispatcher()
4. ServletResponse的sendRedirect()進行轉(zhuǎn)向。
1.2.3 => forward() 4. sendRedirect()
使用forward方法,因為這些這樣比較高效。只有在forward方法不能使用時(比如要轉(zhuǎn)向到一個非本web應(yīng)用),再使用ServletResponse的sendRedirect()方法。
<jsp:fordward>與 sendRedirect 方法的比較
雖然 <jsp:fordward>與 sendRedirect 方法,都可以將瀏覽器瀏覽的網(wǎng)頁,重導(dǎo)至另一個網(wǎng)頁,但是兩者在原理上是不太相同。
a. <jsp:fordward> : 動作是利用伺服端,將資料輸出至緩沖區(qū)的機制,在前一個網(wǎng)頁尚未輸出到客戶端前,取消資料的輸出,然后輸出另一個網(wǎng)頁的資料,達到重導(dǎo)瀏覽器的效果。
優(yōu)點: 兩網(wǎng)頁間可以分享 request 對象內(nèi)的變量。
b. sendRedirect : 動作是透過 HTTP 協(xié)議的 Header , 對瀏覽器下達重導(dǎo)指令,因此,不牽涉到服務(wù)器端緩沖區(qū)的問題。
不過由于 sendRedirect 方法作用于客戶端,所以重導(dǎo)前后網(wǎng)頁無法分享存在于 request 對象內(nèi)的變量。
Solution: response.sendRedirect(“sendRedirect.htm?name=sparkwu&E-Mail=spark.wu@cobra-tech.com”)
【編輯推薦】