JSP頁面跳轉的五種方法

1. RequestDispatcher.forward()html

是在服務器端起做用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet or JSP到另一個Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此時form提交的全部信息在 b.jsp均可以得到,參數自動傳遞. 但forward()沒法重定向至有frame的jsp文件,能夠重定向至有frame的html文件,同時forward()沒法在後面帶參數傳遞,好比servlet?name=frank,這樣不行,能夠程序內經過response.setAttribute("name",name)來傳至下一個頁面。瀏覽器

重定向後瀏覽器地址欄URL不變。服務器

2. response.sendRedirect()jsp

是在用戶的瀏覽器端工做,sendRedirect()能夠帶參數傳遞,好比servlet?name=frank傳至下個頁面,同時它能夠重定向至不一樣的主機上,sendRedirect()能夠重定向有frame.的jsp文件.ui

重定向後在瀏覽器地址欄上會出現重定向頁面的URLurl

注意:spa

◆使用response.sendRedirect時,前面不能有HTML輸出;orm

這並非絕對的,不能有HTML輸出實際上是指不能有HTML被送到了瀏覽器。事實上如今的server都有cache機制,通常在8K(我是說 JSP SERVER),這就意味着,除非你關閉了cache,或者你使用了out.flush()強制刷新,那麼在使用sendRedirect以前,有少許的HTML輸出也是容許的。server

◆ response.sendRedirect以後,應該緊跟一句return。htm

咱們已經知道response.sendRedirect是經過瀏覽器來作轉向的,因此只有在頁面處理完成後,纔會有實際的動做。既然你已經要作轉向了,那麼後的輸出還有什麼意義呢?並且有可能會由於後面的輸出致使轉向失敗。

比較

◆ Dispatcher.forward()是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;

◆response.sendRedirect()則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。

前者更加高效,在前者能夠知足須要時,儘可能使用RequestDispatcher.forward()方法。注:在有些狀況下,好比,須要跳轉到一個其它服務器上的資源,則必須使用HttpServletResponse.sendRequest()方法。

3. <jsp:forward page="" />

它的底層部分是由RequestDispatcher來實現的,所以它帶有RequestDispatcher.forward()方法的印記。若是在以前有不少輸出,前面的輸出已使緩衝區滿,將自動輸出到客戶端,那麼該語句將不起做用,這一點應該特別注意。

另外要注意:它不能改變瀏覽器地址,刷新的話會致使重複提交

4. 修改HTTP header的Location屬性來重定向

經過設置直接修改地址欄來實現頁面的重定向

5. JSP中實如今某頁面停留若干秒後,自動重定向到另外一頁面

在html文件中,下面的代碼:

<meta http-equiv="refresh" content="300; url=target.jsp">

它的含義:在5分鐘以後正在瀏覽的頁面將會自動變爲target.html這一頁。代碼中300爲刷新的延遲時間,以秒爲單位。targer.html爲你想轉向的目標頁,若爲本頁則爲自動刷新本頁。由上可知,能夠經過setHeader來實現某頁面停留若干秒後,自動重定向到另外一頁面。

相關文章
相關標籤/搜索