1. 程式人生 > >Jsp-頁面跳轉的五種方式

Jsp-頁面跳轉的五種方式

1. RequestDispatcher.forward()

是在伺服器端起作用,當使用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不變。 例:在servlet中進行重定向

  1. publicvoid doPost(HttpServletRequest request,HttpServletResponse response)   
  2. throws ServletException,IOException   
  3. {   
  4.   response.setContentType("text/html; charset=gb2312");   
  5.   ServletContext sc = getServletContext();   
  6.   RequestDispatcher rd = null;   
  7.   rd = sc.getRequestDispatcher(
    "/index.jsp"); //定向的頁面 
  8.   rd.forward(request, response);   
  9. }   

通常在servlet中使用,不在jsp中使用。

2. response.sendRedirect()

是在使用者的瀏覽器端工作,sendRedirect()可以帶引數傳遞,比如servlet?name=frank傳至下個頁面,同時它可以重定向至不同的主機上,sendRedirect()可以重定向有frame.的jsp檔案.

重定向後在瀏覽器位址列上會出現重定向頁面的URL。例:在servlet中重定向

  1. publicvoid doPost(HttpServletRequest request,HttpServletResponse response)   
  2. throws ServletException,IOException   
  3. {   
  4.   response.setContentType("text/html; charset=gb2312");   
  5.   response.sendRedirect("/index.jsp");   
  6. }  

由於response是jsp頁面中的隱含物件,故在jsp頁面中可以用response.sendRedirect()直接實現重定位。

注意:

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

這並不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了瀏覽器。事實上現在的server都有cache機制,一般在8K(我是說 JSP SERVER),這就意味著,除非你關閉了cache,或者你使用了out.flush()強制重新整理,那麼在使用sendRedirect之前,有少量的HTML輸出也是允許的。

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

我們已經知道response.sendRedirect是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,才會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因為後面的輸出導致轉向失敗。

比較

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

◆response.sendRedirect()則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求連結。這樣,從瀏覽器的位址列中可以看到跳轉後的連結地址。

前者更加高效,在前者可以滿足需要時,儘量使用RequestDispatcher.forward()方法。注:在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用HttpServletResponse.sendRequest()方法。

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

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

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

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

通過設定直接修改位址列來實現頁面的重定向。 jsp檔案程式碼如下:

  1. <%   
  2.  response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);   
  3.  String newLocn = "/newpath/jsa.jsp";   
  4.  response.setHeader("Location",newLocn);   
  5. %>   

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

在html檔案中,下面的程式碼:

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

它的含義:在5分鐘之後正在瀏覽的頁面將會自動變為target.html這一頁。程式碼中300為重新整理的延遲時間,以秒為單位。targer.html為你想轉向的目標頁,若為本頁則為自動重新整理本頁。

由上可知,可以通過setHeader來實現某頁面停留若干秒後,自動重定向到另一頁面。 關鍵程式碼:

  1. String content=stayTime+";URL="+URL;   
  2. response.setHeader("REFRESH",content);  

相關推薦

微信小程式頁面方式

為了不讓使用者在使用小程式時造成困擾,微信小程式規定頁面路徑只能是五層,請儘量避免多層級的互動方式。 頁面跳轉的話就涉及到了多個頁面層級 第一種:wx.navigateTo(OBJECT) 保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateB

web頁面方式詳解

在做web開發中,頁面跳轉的方式有很多種,然而有些時候這些跳轉如何用到恰到好處卻很容易被忽視。 客戶端觸發跳轉有如下幾種 使用meta元資訊 ? 1 2 <!--如下表示

Jsp-頁面方式

1. RequestDispatcher.forward() 是在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet or JSP到另外一個Servlet,JSP 或普通HTML檔案,也即你的form提交至a.

JSP頁面方法詳解

  1. RequestDispatcher.forward() 是在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet or JSP到另外一個Servlet,JSP 或普通HTML檔案,也即你的form提交至a.

Jsp頁面和js控制頁面的幾方法

Jsp 頁面跳轉的幾種方法 1. RequestDispatcher.forward() 在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet或者是JSP到另外的一個Servlet、JSP 或普通HTML檔

JSP頁面的幾方法以及注意點

       最近自己在做專案時遇到一個問題,明明加了response.sendRedirect() ,系統也執行了,但是它就是不跳轉;最後在網上找到原因如下:        首先我們要知道的是用r

從預設的index.jsp頁面或轉發到其他頁面

使用forward還是redirect都可以完成跳轉       forward:瀏覽器地址不變,所以存在重複提交的問題    <%  pageContext.forward("student/list");   %

從默認的index.jsp頁面或轉發到其他頁面

redirect 不變 word pan student response 使用 重復 jsp頁面跳轉 使用forward還是redirect都可以完成跳轉 forward:瀏覽器地址不變,所以存在重復提交的問題 <% pageContext.fo

Android 隱士方式

1、只有 配置 action 進行跳轉 <intent-filter> <action android:name="testarouter"></action> <category android:name="android.i

jsp頁面的方法集合

java程式碼: package Test.Action.UserAction; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; @Sup

JSP頁面失敗404問題(springmvc)

Spring MVC 分離了控制器、模型物件、過濾器以及處理程式物件的角色。那麼其配置中也就對路徑做了過濾。 在使用eclipse開發JavaWeb時,剛剛入門的小白經常會遇到JSP跳轉失敗404,大多是因為路徑問題。 發現字尾名jsp重複了,我們來

javaweb專案的jsp頁面問題

在編寫自己的第一個javaweb專案的時候,出現了可以載入首頁面,但是當點選註冊按鈕的時候,頁面跳轉出現了問題,報錯是status404 這個就代表著找不到正確的頁面路徑,於是自己在網上查了很

SpringMVC的controller向jsp傳遞資料的方式詳解

第一種   使用model來儲存資料到前臺我的專案目錄為我的controller頁面程式碼@RequestMapping("/demo") public String Model(Model model

jsp頁面請求轉發和請求重定向的區別

jsp實質上就是一個servlet,在完成多頁面跳轉的時候有倆種方式1.請求轉發2.請求重定向 用servlet來舉列子實現(現把三個Servlet在專案的web.xml中初始化和對映哦) 列子思路:寫好一個介面,裡面有請求轉發實現的servlet(圖中:ForwardServlet),和請

JSP頁面的方法總結

java.lang.IllegalStateException: Error: Attempt to clear a buffer that's already been flushedorg.apache.jasper.runtime.PageContextImpl.doForward(PageContex

java web jsp 頁面

1. jsp頁面中用 java script 實現 頁面跳轉   可實現站外跳轉   有瀏覽器快取 <script>window.location.href='http://www.baidu.com';</script> 2.

jsp頁面

///經過location之後會自動機上服務目錄 url views/zwww/gjgl/sjgd/view.jspid=5a72f8d34863dfd9014863e050430081 http://localhost:8080/zwww/views/zwww/views/

JSP-頁面相關(轉發、重定,會話以及cookie、application)

一.頁面跳轉的資料傳輸 示例程式碼 <form action="welcome.jsp" method="post"> 使用者名稱:<input type="text" name="username"><

Struts2 攔截器控制jsp頁面

源自一個題目: 請編寫一個攔截器,該攔截器可以獲得使用者輸入的使用者名稱這個資料,業務邏輯為逐個判斷使用者名稱中是否包含“你”,“我”,“他”三個資料,如果包含則直接返回輸入頁面,如果不包含則執行至PersonAction。(除程式碼外,要給出攔截器和Action的配置檔案

[JSP] Servlet的幾頁面方式

Servlet: 當然,在servlet中,一般跳轉都發生在doGet, doPost等方法裡面。 1) redirect 方式 response.sendRedirect("/a.jsp"); 頁面的路徑是相對路徑。sendRedirect可以將頁面跳轉到任何頁面,不一定侷限於本web應用中,如: