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

          RequestDispatcher

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

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

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

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

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

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

          RequestDispatcher.forward()方法將當(dāng)前的request和response重定向到該RequestDispacher指定的資源。這在實(shí)際項(xiàng)目中大量使用,因?yàn)橥瓿梢粋€(gè)業(yè)務(wù)操作往往需要跨越多個(gè)步驟,每一步驟完成相應(yīng)的處理后,轉(zhuǎn)向到下一個(gè)步驟。比如,通常業(yè)務(wù)處理在Servlet中處理,處理的結(jié)果轉(zhuǎn)向到一個(gè)JSP頁面進(jìn)行顯示。這樣看起來類似于Servlet鏈的功能,但是還有一些區(qū)別。一個(gè)RequestDispatcher對(duì)象可以把請(qǐng)求發(fā)送到任意一個(gè)服務(wù)器資源,而不僅僅是另外一個(gè)Servlet。 include()方法將把Request Dispatcher資源的輸出包含到當(dāng)前輸出中。

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

          主站蜘蛛池模板: 凌云县| 溧阳市| 凤山县| 南木林县| 右玉县| 绥阳县| 阿勒泰市| 开封县| 遂溪县| 筠连县| 新平| 滦南县| 泗洪县| 青岛市| 安图县| 四子王旗| 门源| 册亨县| 宜宾县| 平阳县| 古浪县| 双牌县| 霸州市| 双流县| 鄂尔多斯市| 巨鹿县| 巴东县| 通州市| 潼南县| 沧州市| 南丰县| 三亚市| 大渡口区| 无极县| 孝昌县| 万州区| 石泉县| 慈溪市| 柳河县| 仪征市| 平阴县|