posts - 42, comments - 7, trackbacks - 0, articles - 1

          RequestDispatcher

          Posted on 2008-01-18 10:56 TuringJava 閱讀(389) 評論(0)  編輯  收藏 所屬分類: Structs

          RequestDispatcher是一個Web資源的包裝器,可以用來把當前request傳遞到該資源,或者把新的資源包括到當前響應中。RequestDispatcher接口中定義了兩個方法:include/forward

          由于<jsp:include>只能指定固定的jsp文件名,不能動態指定jsp文件名。我們需要把<jsp:include>翻譯為Java code – RequestDispatcher.include();

          用法:
          <% request.getRequestDispatcher(filename).include(request, response); />

          服務器端的重定向可以有兩種方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法.

          HttpServletResponse.sendRedirect()方法將響應定向到參數location指定的、新的URL。location可以是一個絕對的URL,如response.sendRedirect("http://java.sun.com")也可以使用相對的URL。如果location以“/”開頭,則容器認為相對于當前Web應用的根,否則,容器將解析為相對于當前請求的URL。這種重定向的方法,將導致客戶端瀏覽器的請求URL跳轉。從瀏覽器中的地址欄中可以看到新的URL地址,作用類似于上面設置HTTP響應頭信息的實現。

          RequestDispatcher.forward()方法將當前的request和response重定向到該RequestDispacher指定的資源。這在實際項目中大量使用,因為完成一個業務操作往往需要跨越多個步驟,每一步驟完成相應的處理后,轉向到下一個步驟。比如,通常業務處理在Servlet中處理,處理的結果轉向到一個JSP頁面進行顯示。這樣看起來類似于Servlet鏈的功能,但是還有一些區別。一個RequestDispatcher對象可以把請求發送到任意一個服務器資源,而不僅僅是另外一個Servlet。 include()方法將把Request Dispatcher資源的輸出包含到當前輸出中。

          注意,只有在尚未向客戶端輸出響應時才可以調用forward()方法,如果頁面緩存不為空,在重定向前將自動清除緩存。否則將拋出一個IllegalStateException異常。

          主站蜘蛛池模板: 监利县| 潮州市| 乡城县| 文山县| 郑州市| 临沧市| 丹棱县| 石渠县| 铜川市| 凌云县| 马山县| 天长市| 陈巴尔虎旗| 平定县| 收藏| 威远县| 怀远县| 吉林省| 安图县| 修文县| 仙游县| 双流县| 冀州市| 陆川县| 丰宁| 哈尔滨市| 延长县| 买车| 临澧县| 东乡族自治县| 邯郸市| 扎鲁特旗| 营口市| 饶阳县| 青海省| 邻水| 会同县| 洛宁县| 鸡西市| 交城县| 贵定县|