明天的明天的明天

          用鍵盤改變生活

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            17 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks

          使用JSP大約有下列三種跳轉方式:
          1. response.sendRedirect();
          2. response.setHeader("Location","");
          3. <jsp:forward page="" />

          經過試驗得到下面的一些規則:

          一. response.sendRedirect()

          1. 此語句前不允許有out.flush(),如果有,會有異常:
            java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
             at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
            ...
          2. 跳轉后瀏覽器地址欄變化
          3. 如果要跳到不同主機下,跳轉后,此語句后面的語句會繼續執行,如同新開了線程,但是對response的操作已經無意義了;
          4. 如果要跳到相同主機下,此語句后面的語句執行完成后才會跳轉;

          二. response.setHeader("Location","")

          1. 此語句前不允許有out.flush(),如果有,頁面不會跳轉。
          2. 跳轉后瀏覽器地址欄變化
          3. 此語句后面的語句執行完成后才會跳轉

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

          1. 此語句前不允許有out.flush(),如果有,會有異常:
            java.lang.IllegalStateException: forward() not allowed after buffer has committed.
             at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
             at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
             at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)
             ...
          2. 跳轉后瀏覽器地址欄不變,但是只能跳到當前主機下
          3. 此語句后面的語句執行完成后才會跳轉 
          4. 跳轉后得路徑變為當前路徑,圖片不是絕對路徑將無法顯示

          JSP跳轉頁面詳解
          在JSP中使用jsp forward Action來實現頁面的跳轉功能。

             語法:
          <jsp:forward page="{relativeURL|<%= expression %>}"/> 或
          <jsp:forward page="{relativeURL|<%= expression %>}">
          <jsp:param name="parameterName"
          value="{parameterValue|<%= expression %>}"/>+</jsp:forward>
            這個action使您可以將request向前到另外一個頁面。它只有一個屬性,page。Page應有一個相對的URL組成。這可以是一個靜態的值或者是能夠在被請求的時候計算得到的值,就如下面兩個例子一般:
          <jsp:forward page="/utils/errorReporter.jsp"/>
          <jsp:forward page="<%= someJavaExpression %>"/>
          !supportEmptyParas]>
            現在以一個具體例子來說明:在test1.jsp中使用forward使其跳轉到test2.jsp頁面中。
          Test1.jsp
          <HTML>
          <HEAD>
          <TITLE>forward test</TITLE>
          !supportEmptyParas]>
          </HEAD>
          !supportEmptyParas]>
          <BODY BGCOLOR="#FFFFFF">
          <!--跳轉到test2.jsp--!>
          <jsp:forward page="/test2.jsp"/>
          </BODY>
          </HTML>
          !supportEmptyParas]>
          test2.jsp
          <HTML>
          <HEAD>
          <TITLE> forward test </TITLE>
          !supportEmptyParas]>
          </HEAD>
          !supportEmptyParas]>
          <BODY BGCOLOR="#FFFFFF">
          <%out.println("這是jsp2.jsp頁面產生出的輸出");%>
          </BODY>
          </HTML>
          !supportEmptyParas]>
            運行test1.jsp,可在瀏覽器中看見:"這是jsp2.jsp頁面產生出的輸出"的輸出信息。但是如果你在test1.jsp和test2.jsp這兩個頁面中有參數傳遞怎么辦呢?用get方式吧,不但總的長度有限制,使用現在十分不方便,而且有時候還不安全。其實我們完全可以使用jsp1.1中給forward里提供的para屬性就可以解決。現以test3.jsp和test4.jsp來說明。
          !supportEmptyParas]>
          Test1.jsp
          <HTML>
          <HEAD>
          <TITLE> forward test </TITLE>
          !supportEmptyParas]>
          </HEAD>
          !supportEmptyParas]>
          <BODY BGCOLOR="#FFFFFF">
          <jsp:forward page="/test4.jsp">
          <jsp:param name="name" value="powerman"/>
          <jsp:param name="address" value=" 北京西大街188號"/>
          </jsp:forward>
          </BODY>
          </HTML>
          !supportEmptyParas]>
          test2.jsp
          <HTML>
          <HEAD>
          <TITLE>forward test</TITLE>
          !supportEmptyParas]>
          </HEAD>
          !supportEmptyParas]>
          <BODY BGCOLOR="#FFFFFF">
          <%
          out.println("這是jsp4.jsp頁面產生出的輸出"+"<br>");
          out.println("姓名:"+request.getParameter("name")+"<br>");
          out.println("地址:"+request.getParameter("address")+"<br>");
          !supportEmptyParas]>
          %>
          </BODY>
          </HTML>
             運行test3.jsp,可在瀏覽器中看見:
             "這是jsp4.jsp頁面產生出的輸出
             姓名:powerman
             地址:北京西大街188號"
          的輸出信息
          posted on 2007-09-17 12:54 Endless 閱讀(1768) 評論(1)  編輯  收藏

          Feedback

          # re: 【轉】JSP三種頁面跳轉方式 2012-01-06 08:49 525
          202  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 娄底市| 灯塔市| 四川省| 永寿县| 荣成市| 枣阳市| 日喀则市| 黔西| 平定县| 秀山| 卓尼县| 兴仁县| 伊吾县| 定结县| 济源市| 敦化市| 牡丹江市| 满洲里市| 太白县| 兰溪市| 鲁甸县| 三门县| 额济纳旗| 泸溪县| 中超| 寿宁县| 屏山县| 阿瓦提县| 夏邑县| 陇川县| 延安市| 青龙| 瑞安市| 信阳市| 公安县| 浠水县| 万载县| 盱眙县| 科技| 县级市| 黄平县|